Last Updated: 2020-04-19 12:20:20 UTC
Disclaimer
This is an independent simulation and does not reflect any portuguese governmental position about the subject.
This is a work in progress.
Concepts
- Incubation Period: is the time between infection and the visible appearance of symptoms.
- Latency period: is the period of time between infection and the ability to infect someone.
Model Hypothesis
Compartments
The population is assumed to be divided in compartments, for example:
- Susceptible individuals
- Infected, symptomatic and infectious
- Recovered, immune from further infection
Discrete time
The observations, for simplicity, will be analyzed as a discrete time-series. In this case we will use days.
Population
The total number of individuals is modeled using currently available data for birth and death rates.
Other assumptions
- The population is considered big, so the random effects can be ignored.
- The population is considered homogeneous at any point in time. This means that the individuals of any compartment are distributed randomically.
- The disease is transmitted by proximity or contact between an infected and a susceptible individual (individual contact model - ICM).
- The susceptible individual becomes infected instantaneously.
- The infected individuals may or may not be infectious, until they get symptoms.
- The infected eventually get recovered and become immune, or die.
- The population pyramid is taking in account for disease severity.
Extended Model
A more complex model is proposed by Tim Churches1, adding several compartments and permit a better exploration of the potential effects of various combinations and timings of interventions on COVID-19 spread.
Attention to the description of each compartment:
| S |
Susceptible individuals |
| E |
Exposed and infected, not yet symptomatic but potentially infectious |
| I |
Infected, symptomatic and infectious |
| Q |
Infectious, but (self-)isolated |
| H |
Requiring hospitalisation (would normally be hospitalised if capacity available) |
| R |
Recovered, immune from further infection |
| F |
Case fatality (death due to COVID-19, not other causes) |
Parameters
There is a lot of parameters. We will start with the defaults and adjust accordingly to new evidences.
The full list of parameters is available in the source code.
Time-variant parameters
Several of the simulation parameters can also be varied over time. That is, as well as accepting a single value, they also accept a vector of values with length equal to nsteps, the number of days over which the simulation runs. Assuming nsteps=366, we can, for example, set quar.rate = c(rep(1/10,30), rep(1/3, 335)). That defines a step function in which the transition-to-isolation rate for the I compartment is 0.1 for the first 30 days, then steps up to 0.33 thereafter, reflecting, say, a campaign or government edict to self-isolate. Of course, the vector of values can be a smooth function, or can go up then down again, or whatever you wish to model. This is an extremely powerful feature of computational models such as this, and one very hard to incorporate into purely mathematical models.
Most of the parameters for which time-variation is useful support it. If they donât, you will receive an error message (the table above will be updated to include this information later).
Baseline simulation
Parameters used
- Population: 3,574,394 (estimation of 2019 from Census)4
- Birth rate: 7.7 â°4
- Baseline death rate (any cause): 9.86 â°5
- Baseline hospital death rate (any cause): 50.5 â°5
- Rates of exposition (table below)
- Report rate (table below)
- Ages and severity (table below)
| Date |
Event |
E-S |
I-S |
Q-S |
| 08 March |
Suspension of visits to health facilities and prisons |
16 |
10 |
5.0 |
| 10 March |
Suspension of flights from the most affected areas of Italy |
15 |
10 |
5.0 |
| 11 March |
WHO declares pandemic |
15 |
10 |
5.0 |
| 13 March |
Portugal alert status statement |
10 |
7 |
3.5 |
| 15 March |
Restrictions on access to commercial spaces |
7 |
5 |
2.5 |
| 16 March |
Suspension of classes |
5 |
3 |
1.5 |
| 18 March |
Declaration of state of emergency |
5 |
2 |
1.0 |
| 02 April |
Extension of the state of emergency |
3 |
2 |
1.0 |
| Ages |
Prevalence |
Fatality rate |
| >=0 |
8.03% |
1.30% |
| >=10 |
10.34% |
1.30% |
| >=20 |
11.16% |
1.30% |
| >=30 |
12.35% |
1.30% |
| >=40 |
15.51% |
1.30% |
| >=50 |
15.36% |
1.30% |
| >=60 |
12.76% |
2.60% |
| >=70 |
8.68% |
3.90% |
| >=80 |
5.79% |
5.20% |
Distribution of duration in key compartments
Baseline Prevalence
Overall - Interactive Plot
Comparison with real data - Interactive Plot
Basic reproduction number \(R_{0}\)
Estimated R is 1.2 (±0.02)
Running an intervention experiments
Work in progressâŠ
Acknowledgments
This simulations are heavily based on Tim Churchesâ code, available here.
LS0tCnRpdGxlOiAiU0lSIE1vZGVsIGZvciBQb3J0dWdhbCAtIE5vcnRoIFJlZ2lvbiIKYmlibGlvZ3JhcGh5OiByZWZlcmVuY2VzLmJpYgpjc2w6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jaXRhdGlvbi1zdHlsZS1sYW5ndWFnZS9zdHlsZXMvbWFzdGVyL2FtZXJpY2FuLW1lZGljYWwtYXNzb2NpYXRpb24uY3NsCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0aGVtZTogdW5pdGVkCiAgICB0b2M6IHllcwogICAgZmlnX3dpZHRoOiAxMAogICAgZmlnX2hlaWdodDogNgpjcmVhdGl2ZV9jb21tb25zOiBDQyBCWS1TQQplZGl0b3Jfb3B0aW9uczogCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGlubGluZQotLS0KCjxoZWFkPgo8IS0tIEdsb2JhbCBzaXRlIHRhZyAoZ3RhZy5qcykgLSBHb29nbGUgQW5hbHl0aWNzIC0tPgo8c2NyaXB0IGFzeW5jIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xldGFnbWFuYWdlci5jb20vZ3RhZy9qcz9pZD1VQS0xNjAwMzM5NzEtMiI+PC9zY3JpcHQ+CjxzY3JpcHQ+CiAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgZnVuY3Rpb24gZ3RhZygpe2RhdGFMYXllci5wdXNoKGFyZ3VtZW50cyk7fQogIGd0YWcoJ2pzJywgbmV3IERhdGUoKSk7CgogIGd0YWcoJ2NvbmZpZycsICdVQS0xNjAwMzM5NzEtMicpOwo8L3NjcmlwdD4KPC9oZWFkPiAKCkxhc3QgVXBkYXRlZDogYHIgbHVicmlkYXRlOjpub3coIlVUQyIpYCBVVEMKCiMgRGlzY2xhaW1lcgoKVGhpcyBpcyBhbiBpbmRlcGVuZGVudCBzaW11bGF0aW9uIGFuZCBkb2VzIG5vdCByZWZsZWN0IGFueSBwb3J0dWd1ZXNlIGdvdmVybm1lbnRhbCBwb3NpdGlvbiBhYm91dCB0aGUgc3ViamVjdC4KClRoaXMgaXMgYSB3b3JrIGluIHByb2dyZXNzLgoKIyBDb25jZXB0cwoKLSAqKkluY3ViYXRpb24gUGVyaW9kKio6IGlzIHRoZSB0aW1lIGJldHdlZW4gaW5mZWN0aW9uIGFuZCB0aGUgdmlzaWJsZSBhcHBlYXJhbmNlIG9mIHN5bXB0b21zLgotICoqTGF0ZW5jeSBwZXJpb2QqKjogaXMgdGhlIHBlcmlvZCBvZiB0aW1lIGJldHdlZW4gaW5mZWN0aW9uIGFuZCB0aGUgYWJpbGl0eSB0byBpbmZlY3Qgc29tZW9uZS4KCiMgTW9kZWwgSHlwb3RoZXNpcwoKIyMgQ29tcGFydG1lbnRzCgpUaGUgcG9wdWxhdGlvbiBpcyBhc3N1bWVkIHRvIGJlIGRpdmlkZWQgaW4gY29tcGFydG1lbnRzLCBmb3IgZXhhbXBsZToKCi0gKipTdXNjZXB0aWJsZSoqIGluZGl2aWR1YWxzCi0gKipJbmZlY3RlZCoqLCBzeW1wdG9tYXRpYyBhbmQgaW5mZWN0aW91cwotICoqUmVjb3ZlcmVkKiosIGltbXVuZSBmcm9tIGZ1cnRoZXIgaW5mZWN0aW9uCgojIyBEaXNjcmV0ZSB0aW1lCgpUaGUgb2JzZXJ2YXRpb25zLCBmb3Igc2ltcGxpY2l0eSwgd2lsbCBiZSBhbmFseXplZCBhcyBhICpkaXNjcmV0ZSogdGltZS1zZXJpZXMuCkluIHRoaXMgY2FzZSB3ZSB3aWxsIHVzZSBgZGF5c2AuCgojIyBQb3B1bGF0aW9uCgpUaGUgdG90YWwgbnVtYmVyIG9mIGluZGl2aWR1YWxzIGlzIG1vZGVsZWQgdXNpbmcgY3VycmVudGx5IGF2YWlsYWJsZSBkYXRhIGZvciBiaXJ0aCBhbmQgZGVhdGggcmF0ZXMuCgojIyBPdGhlciBhc3N1bXB0aW9ucwoKLSBUaGUgcG9wdWxhdGlvbiBpcyBjb25zaWRlcmVkIGJpZywgc28gdGhlIHJhbmRvbSBlZmZlY3RzIGNhbiBiZSBpZ25vcmVkLgotIFRoZSBwb3B1bGF0aW9uIGlzIGNvbnNpZGVyZWQgaG9tb2dlbmVvdXMgYXQgYW55IHBvaW50IGluIHRpbWUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgaW5kaXZpZHVhbHMgb2YgYW55IGNvbXBhcnRtZW50IGFyZSBkaXN0cmlidXRlZCByYW5kb21pY2FsbHkuCi0gVGhlIGRpc2Vhc2UgaXMgdHJhbnNtaXR0ZWQgKmJ5IHByb3hpbWl0eSBvciBjb250YWN0KiBiZXR3ZWVuIGFuIGluZmVjdGVkIGFuZCBhIHN1c2NlcHRpYmxlIGluZGl2aWR1YWwgKGluZGl2aWR1YWwgY29udGFjdCBtb2RlbCAtIElDTSkuCi0gVGhlIHN1c2NlcHRpYmxlIGluZGl2aWR1YWwgYmVjb21lcyBpbmZlY3RlZCBpbnN0YW50YW5lb3VzbHkuCi0gVGhlIGluZmVjdGVkIGluZGl2aWR1YWxzIG1heSBvciBtYXkgbm90IGJlIGluZmVjdGlvdXMsIHVudGlsIHRoZXkgZ2V0IHN5bXB0b21zLgotIFRoZSBpbmZlY3RlZCBldmVudHVhbGx5IGdldCByZWNvdmVyZWQgYW5kICpiZWNvbWUgaW1tdW5lKiwgb3IgZGllLgotIFRoZSAqcG9wdWxhdGlvbiBweXJhbWlkKiBpcyB0YWtpbmcgaW4gYWNjb3VudCBmb3IgZGlzZWFzZSBzZXZlcml0eS4KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQp2ZXJzaW9uX2RhdGUgPC0gbHVicmlkYXRlOjp5bWQoIjIwMjAtMDQtMTEiKQoKa25pdHI6Om9wdHNfY2h1bmskc2V0KAogIHdhcm5pbmdzID0gVFJVRSwKICBlY2hvID0gRkFMU0UsCiAgY2FjaGUgPSBGQUxTRSwKICBwcm9tcHQgPSBGQUxTRSwKICB0aWR5ID0gVFJVRSwKICB0aWR5Lm9wdHMgPSBsaXN0KHdpZHRoLmN1dG9mZiA9IDYwKQopCiMgSW5zdGFsbCBwYWNrYWdlIGlmIG5lZWRlZAppZiAoIXJlcXVpcmVOYW1lc3BhY2UoIkVwaU1vZGVsIiwgcXVpZXRseSA9IFRSVUUpKSB7CiAgZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJzdGF0bmV0L0VwaU1vZGVsIiwgcXVpZXQgPSBUUlVFKQp9CmlmICghcmVxdWlyZU5hbWVzcGFjZSgiZ2dyaWRnZXMiLCBxdWlldGx5ID0gVFJVRSkpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJnZ3JpZGdlcyIsIHF1aWV0ID0gVFJVRSkKfQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoImluY2lkZW5jZSIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGluc3RhbGwucGFja2FnZXMoImluY2lkZW5jZSIsIHF1aWV0ID0gVFJVRSkKfQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoInNvZGl1bSIsIHF1aWV0bHkgPSBUUlVFKSkgewogIHN5c3RlbSgiYXB0IGluc3RhbGwgbGlic29kaXVtLWRldiIpCiAgaW5zdGFsbC5wYWNrYWdlcygic29kaXVtIiwgcXVpZXQgPSBUUlVFKQp9CmlmICghcmVxdWlyZU5hbWVzcGFjZSgiZXBpdHJpeCIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGluc3RhbGwucGFja2FnZXMoImVwaXRyaXgiLCBxdWlldCA9IFRSVUUpCn0KaWYgKCFyZXF1aXJlTmFtZXNwYWNlKCJlYXJseVIiLCBxdWlldGx5ID0gVFJVRSkpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJlYXJseVIiLCBxdWlldCA9IFRSVUUpCn0KaWYgKCFyZXF1aXJlTmFtZXNwYWNlKCJqc29ubGl0ZSIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGluc3RhbGwucGFja2FnZXMoImpzb25saXRlIiwgcXVpZXQgPSBUUlVFKQp9CmlmICghcmVxdWlyZU5hbWVzcGFjZSgiRGlhZ3JhbW1lUiIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGluc3RhbGwucGFja2FnZXMoIkRpYWdyYW1tZVIiLCBxdWlldCA9IFRSVUUpCn0KaWYgKCFyZXF1aXJlTmFtZXNwYWNlKCJndCIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigicnN0dWRpby9ndCIsIHF1aWV0ID0gVFJVRSkKfQppZiAoIXJlcXVpcmVOYW1lc3BhY2UoInBsb3RseSIsIHF1aWV0bHkgPSBUUlVFKSkgewogIGluc3RhbGwucGFja2FnZXMoInBsb3RseSIsIHF1aWV0ID0gVFJVRSkKfQoKIyBMb2FkIEVwaU1vZGVsCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShFcGlNb2RlbCkpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShFcGlFc3RpbSkpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeSh0aWR5dmVyc2UpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoZ2dyaWRnZXMpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkoaW5jaWRlbmNlKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGVhcmx5UikpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShqc29ubGl0ZSkpCnN1cHByZXNzTWVzc2FnZXMobGlicmFyeShEaWFncmFtbWVSKSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGd0KSkKc3VwcHJlc3NNZXNzYWdlcyhsaWJyYXJ5KGZvcmVhY2gpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkocGFyYWxsZWwpKQpzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkocGxvdGx5KSkKCmlmIChyZXF1aXJlTmFtZXNwYWNlKCJjb25mbGljdGVkIiwgcXVpZXRseSA9IFRSVUUpKSB7CiAgY29uZmxpY3RlZDo6Y29uZmxpY3RfcHJlZmVyKCJsYWciLCAiZHBseXIiKQogIGNvbmZsaWN0ZWQ6OmNvbmZsaWN0X3ByZWZlcigiZmlsdGVyIiwgImRwbHlyIikKICBjb25mbGljdGVkOjpjb25mbGljdF9wcmVmZXIoImxheW91dCIsICJwbG90bHkiKQp9CmBgYAoKYGBge3IgbW9ua2V5IHBhdGNoLCBlY2hvPUZBTFNFfQoKIyBFeHRlbnNpb24gdG8gRXBpTW9kZWwgcGF0Y2gsIGJ5IFRpbSBDaHVyY2hlcywgd2l0aCBsaXR0bGUgY2hhbmdlcwpzb3VyY2VfZmlsZXMgPC0gYygKICAiX2ljbS5tb2QuaW5pdC5zZWlxaHJmLlIiLAogICJfaWNtLm1vZC5zdGF0dXMuc2VpcWhyZi5SIiwKICAiX2ljbS5tb2Qudml0YWwuc2VpcWhyZi5SIiwKICAiX2ljbS5jb250cm9sLnNlaXFocmYuUiIsCiAgIl9pY20udXRpbHMuc2VpcWhyZi5SIiwKICAiX2ljbS5zYXZlb3V0LnNlaXFocmYuUiIsCiAgIl9pY20uaWNtLnNlaXFocmYuUiIKKQoKZm9yIChzb3VyY2VfZmlsZSBpbiBzb3VyY2VfZmlsZXMpIHsKICBzb3VyY2UocGFzdGUwKCIuL2V4dC8iLCBzb3VyY2VfZmlsZSkpCn0KYGBgCgpgYGB7ciBmZXRjaCBkYXRhLCBlY2hvPUZBTFNFfQoKIyBHZXQgZGF0YSBmcm9tIERHUyBpZiB0aGUgY2FjaGUgZmlsZSBpcyBmcm9tIHllc3RlcmRheQppZiAoIWZpbGUuZXhpc3RzKCIuLi9kYXRhL2Rncy5yZGEiKSB8IGZpbGUuaW5mbygiLi4vZGF0YS9kZ3MucmRhIikkbXRpbWUgPCBsdWJyaWRhdGU6OnRvZGF5KCkpIHsKICBkZ3NfY2FzZXNfdXJsIDwtICJodHRwczovL3NlcnZpY2VzLmFyY2dpcy5jb20vQ0NaaUdTRVFiQXh4RlZoMy9hcmNnaXMvcmVzdC9zZXJ2aWNlcy9DT1ZJRDE5UG9ydHVnYWxfdmlldy9GZWF0dXJlU2VydmVyLzAvcXVlcnk/Zj1qc29uJndoZXJlPTE9MSZyZXR1cm5HZW9tZXRyeT1mYWxzZSZzcGF0aWFsUmVsPWVzcmlTcGF0aWFsUmVsSW50ZXJzZWN0cyZvdXRGaWVsZHM9KiZvcmRlckJ5RmllbGRzPWRhdGFyZWxhdG9yaW8gYXNjJnJlc3VsdE9mZnNldD0wJnJlc3VsdFJlY29yZENvdW50PTEwMDAiCiAgZGdzX2V4dHJhX3VybCA8LSAiaHR0cHM6Ly9zZXJ2aWNlcy5hcmNnaXMuY29tL0NDWmlHU0VRYkF4eEZWaDMvYXJjZ2lzL3Jlc3Qvc2VydmljZXMvQW4lQzMlQTFsaXNlc19FeHRyYV9Db3ZpZC9GZWF0dXJlU2VydmVyLzAvcXVlcnk/Zj1qc29uJndoZXJlPTElM0QxJnJldHVybkdlb21ldHJ5PWZhbHNlJnNwYXRpYWxSZWw9ZXNyaVNwYXRpYWxSZWxJbnRlcnNlY3RzJm91dEZpZWxkcz0qJm9yZGVyQnlGaWVsZHM9RGF0YV9kb19SZWxhdCVDMyVCM3JpbyUyMGFzYyZyZXN1bHRPZmZzZXQ9MCZyZXN1bHRSZWNvcmRDb3VudD0yMDAwJmNhY2hlSGludD10cnVlIgogIGRnc19nZW9fdXJsIDwtICJodHRwczovL3NlcnZpY2VzLmFyY2dpcy5jb20vQ0NaaUdTRVFiQXh4RlZoMy9hcmNnaXMvcmVzdC9zZXJ2aWNlcy9DT1ZJRDE5UG9ydHVnYWxfdmlldy9GZWF0dXJlU2VydmVyLzEvcXVlcnk/Zj1qc29uJndoZXJlPTE9MSZyZXR1cm5HZW9tZXRyeT1mYWxzZSZzcGF0aWFsUmVsPWVzcmlTcGF0aWFsUmVsSW50ZXJzZWN0cyZvdXRGaWVsZHM9KiZvcmRlckJ5RmllbGRzPWRpc3RfY2Fzb3Njb25mIGRlc2MmcmVzdWx0T2Zmc2V0PTAmcmVzdWx0UmVjb3JkQ291bnQ9MTAwMCIKCiAgZGdzX2Nhc2VzIDwtIGZyb21KU09OKFVSTGVuY29kZShkZ3NfY2FzZXNfdXJsKSkKICBkZ3NfZXh0cmEgPC0gZnJvbUpTT04oVVJMZW5jb2RlKGRnc19leHRyYV91cmwpKQogIGRnc19nZW8gPC0gZnJvbUpTT04oVVJMZW5jb2RlKGRnc19nZW9fdXJsKSkKCiAgIyBzYXZlIGNhY2hlIGZpbGUKICBzYXZlKGRnc19jYXNlcywgZGdzX2V4dHJhLCBkZ3NfZ2VvLCBmaWxlID0gIi4uL2RhdGEvZGdzLnJkYSIpCn0gZWxzZSB7CiAgIyBsb2FkIGNhY2hlIGZpbGUKICBsb2FkKCIuLi9kYXRhL2Rncy5yZGEiKQp9CmBgYAoKYGBge3IgdGlkeSBkYXRhLCBlY2hvPUZBTFNFfQoKIyBkYXRhc2V0IHdpdGggaW5mb3JtYXRpb24gYnkgZ2VvZ3JhcGhpYyBsb2NhdGlvbiAtLS0tCmdlb19kYXRhc2V0IDwtIGRnc19nZW9bWyJmZWF0dXJlcyJdXVtbImF0dHJpYnV0ZXMiXV0KZ2VvX2NvbG5hbWVzIDwtIGMoCiAgImlkX29iamV0byIsICJpZF9nbG9iYWwiLCAiZGF0YV9yZWxhdG9yaW8iLCAiZGlzdHJpdG8iLAogICJjYXNvc19jb25maXJtYWRvcyIsICJuX29iaXRvcyIsICJyZWN1cGVyYWRvcyIsICJpZF9nbG9iYWxfcGFpIiwKICAiY3JlYXRpb25fZGF0ZSIsICJjcmVhdG9yIiwgImVkaXRfZGF0ZSIsICJlZGl0b3IiLCAidW50aW1vX3JlZ2lzdG8iCikKbmFtZXMoZ2VvX2RhdGFzZXQpIDwtIGdlb19jb2xuYW1lcwoKZ2VvX2RhdGFzZXQkZGF0YV9yZWxhdG9yaW8gPC0gYXMuRGF0ZShhcy5QT1NJWGN0KGdlb19kYXRhc2V0JGRhdGFfcmVsYXRvcmlvIC8gMTAwMCwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKSkKZ2VvX2RhdGFzZXQkY3JlYXRpb25fZGF0ZSA8LSBhcy5EYXRlKGFzLlBPU0lYY3QoZ2VvX2RhdGFzZXQkY3JlYXRpb25fZGF0ZSAvIDEwMDAsIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikpCmdlb19kYXRhc2V0JGVkaXRfZGF0ZSA8LSBhcy5EYXRlKGFzLlBPU0lYY3QoZ2VvX2RhdGFzZXQkZWRpdF9kYXRlIC8gMTAwMCwgb3JpZ2luID0gIjE5NzAtMDEtMDEiKSkKCiMgZmlsdGVyIGRhdGEgZm9yIG9ubHkgbm9ydGggb2YgUG9ydHVnYWwgLS0tLQpnZW9fbm9ydGUgPC0gZ2VvX2RhdGFzZXQgJT4lCiAgZmlsdGVyKGRpc3RyaXRvID09ICIrMDQxLjQ1NzU2Xy0wMDcuNjc4NjUiKSAlPiUKICBkaXN0aW5jdF9hdCh2YXJzKGRhdGFfcmVsYXRvcmlvKSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lCiAgYXJyYW5nZShkYXRhX3JlbGF0b3JpbykgJT4lCiAgbXV0YXRlKGlkX29iamV0byA9IHNlcSgxMywgbigpICsgMTMgLSAxKSkKCiMgZXN0aW1hdGVkIHJlcG9ydCByYXRlLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gaHR0cHM6Ly9jbW1pZC5naXRodWIuaW8vdmlzdWFsaXNhdGlvbnMvaW5mZXJyaW5nLWNvdmlkMTktY2FzZXMtZnJvbS1kZWF0aHMKcmVwb3J0X3JhdGUgPC0gYygKICByZXAoMC4xNSwgMjgpLCAwLjE3LCAwLjE5LCAwLjIyLCAwLjI2LCAwLjI4LCAwLjI4LCAwLjMwLCAwLjMxLAogIDAuMzIsIDAuMzMsIDAuMzQsIDAuMzMsIDAuMzMsIDAuMzIsIDAuMzMsIDAuMzQsIDAuMzYKKQoKcmVwb3J0X3JhdGUgPC0gYyhyZXBvcnRfcmF0ZSwgcmVwKHRhaWwocmVwb3J0X3JhdGUsIDEpLCB0YWlsKGdlb19ub3J0ZSRpZF9vYmpldG8sIDEpIC0gbGVuZ3RoKHJlcG9ydF9yYXRlKSkpCgpnZW9fbm9ydGUgPC0gY2JpbmQoZ2VvX25vcnRlLCByZXBvcnRfcmF0ZSA9IHRhaWwocmVwb3J0X3JhdGUsIG5yb3coZ2VvX25vcnRlKSkpCgojIHdob2xlIFBvcnR1Z2FsIGRhdGFzZXQgLS0tLQoKY2FzZXNfZGF0YXNldCA8LSBkZ3NfY2FzZXNbWyJmZWF0dXJlcyJdXVtbImF0dHJpYnV0ZXMiXV0KY29sbmFtZXMgPC0gYygKICAiaWRfb2JqZXRvIiwgImlkX2dsb2JhbCIsICJkYXRhX3JlbGF0b3JpbyIsICJjYXNvc19jb25maXJtYWRvcyIsCiAgIm5fb2JpdG9zIiwgInJlY3VwZXJhZG9zIiwgImNhc29zX3N1c3BlaXRvcyIsICJjYXNvc19tYXNjdWxpbm9zIiwKICAiY2Fzb3NfZmVtaW5pbm9zIiwgImdyX2V0YXJpb18wXzkiLCAiZ3JfZXRhcmlvXzEwXzE5IiwgImdyX2V0YXJpb18yMF8yOSIsCiAgImdyX2V0YXJpb18zMF8zOSIsICJncl9ldGFyaW9fNDBfNDkiLCAiZ3JfZXRhcmlvXzUwXzU5IiwgImdyX2V0YXJpb182MF82OSIsCiAgImdyX2V0YXJpb183MF83OSIsICJncl9ldGFyaW9fODBfODkiLCAiZ3JfZXRhcmlvXzkwXzk5IiwgImNhc29zX2ltcG9ydGFkb3MiLAogICJjYXNvc19jb250YWN0byIsICJzaW50b21hX2ZlYnJlIiwgInNpbnRvbWFfdG9zc2UiLCAic2ludG9tYV9kb3JlcyIsCiAgInNpbnRvbWFfY2VmYWxlaWEiLCAic2ludG9tYV9mcmFxdWV6YSIsICJjcmVhdGlvbl9kYXRlIiwgImNyZWF0b3IiLCAiZWRpdF9kYXRlIiwKICAiZWRpdG9yIiwgImNhc29zX25vdm9zIiwgInNpbnRvbWFfZGlmcmVzcGlyYXRvcmlhIiwgInVsdGltb19yZWdpc3RvIiwKICAiZXN0cmFuZ2Vpcm8iLCAiY2Fzb3NfYXRpdm9zIiwgImFndWFyZGFfcmVzdWx0YWRvIiwgImNvbnRhdG9zX3ZpZ2lsYW5jaWEiLAogICJjYWRlaWFzX3RyYW5zbWlzc2FvIiwgImNhc29zX2ludGVybmFkb3MiLCAiY2Fzb3NfaW50ZXJuYWRvc191Y2kiCikKbmFtZXMoY2FzZXNfZGF0YXNldCkgPC0gY29sbmFtZXMKY2FzZXNfZGF0YXNldCRkYXRhX3JlbGF0b3JpbyA8LSBhcy5EYXRlKGFzLlBPU0lYY3QoY2FzZXNfZGF0YXNldCRkYXRhX3JlbGF0b3JpbyAvIDEwMDAsIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikpCmNhc2VzX2RhdGFzZXQkZWRpdF9kYXRlIDwtIGFzLlBPU0lYY3QoY2FzZXNfZGF0YXNldCRlZGl0X2RhdGUgLyAxMDAwLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpCmNhc2VzX2RhdGFzZXQkY3JlYXRpb25fZGF0ZSA8LSBhcy5QT1NJWGN0KGNhc2VzX2RhdGFzZXQkY3JlYXRpb25fZGF0ZSAvIDEwMDAsIG9yaWdpbiA9ICIxOTcwLTAxLTAxIikKCiMgcmVtb3ZlIHJvd3MgdGhhdCBoYXZlIGFsbCBOQSBpbiBhIHNlbGVjdGlvbiBvZiBjb2x1bW5zCmNhc2VzX2RhdGFzZXQgPC0gY2FzZXNfZGF0YXNldCAlPiUgZmlsdGVyX2F0KHZhcnMoY2Fzb3NfY29uZmlybWFkb3M6c2ludG9tYV9mcmFxdWV6YSksIGFueV92YXJzKCFpcy5uYSguKSkpCgpjYXNlc19kYXRhc2V0IDwtIGNhc2VzX2RhdGFzZXQgJT4lCiAgc2VsZWN0KAogICAgaWRfb2JqZXRvLCBkYXRhX3JlbGF0b3JpbywgY2Fzb3NfY29uZmlybWFkb3MsIGNhc29zX25vdm9zLAogICAgY2Fzb3Nfc3VzcGVpdG9zLCByZWN1cGVyYWRvcywgbl9vYml0b3MsIGNhc29zX21hc2N1bGlub3MsIGNhc29zX2ZlbWluaW5vcywKICAgIGNhc29zX2ltcG9ydGFkb3MsIGNhc29zX2NvbnRhY3RvLCBlc3RyYW5nZWlybywgY2Fzb3NfYXRpdm9zLCBhZ3VhcmRhX3Jlc3VsdGFkbywKICAgIGdyX2V0YXJpb18wXzksIGdyX2V0YXJpb18xMF8xOSwgZ3JfZXRhcmlvXzIwXzI5LCBncl9ldGFyaW9fMzBfMzksCiAgICBncl9ldGFyaW9fNDBfNDksIGdyX2V0YXJpb181MF81OSwgZ3JfZXRhcmlvXzYwXzY5LCBncl9ldGFyaW9fNzBfNzksCiAgICBncl9ldGFyaW9fODBfODksIGdyX2V0YXJpb185MF85OSwgY29udGF0b3NfdmlnaWxhbmNpYSwKICAgIGNhc29zX2ludGVybmFkb3MsIGNhc29zX2ludGVybmFkb3NfdWNpLCBzaW50b21hX2ZlYnJlLCBzaW50b21hX3Rvc3NlLAogICAgc2ludG9tYV9kb3Jlcywgc2ludG9tYV9jZWZhbGVpYSwgc2ludG9tYV9mcmFxdWV6YSwgc2ludG9tYV9kaWZyZXNwaXJhdG9yaWEKICApICU+JQogIGFycmFuZ2UoZGF0YV9yZWxhdG9yaW8pICU+JQogIGRpc3RpbmN0X2F0KHZhcnMoZGF0YV9yZWxhdG9yaW86c2ludG9tYV9kaWZyZXNwaXJhdG9yaWEpLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUKICBtdXRhdGUoaWRfb2JqZXRvID0gMTpuKCkpCgojIE5ldyBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIHdob2xlIFBvcnR1Z2FsIC0tLS0KCmV4dHJhX2RhdGFzZXQgPC0gZGdzX2V4dHJhW1siZmVhdHVyZXMiXV1bWyJhdHRyaWJ1dGVzIl1dCmNvbG5hbWVzIDwtIGMoCiAgImRhdGFfcmVsYXRvcmlvIiwgImNhc29zX2NvbmZpcm1hZG9zIiwgImNhc29zX2NvbmZpcm1hZG9zX2V2byIsCiAgInJlY3VwZXJhZG9zIiwgInJlY3VwZXJhZG9zX2V2byIsICJuX29iaXRvcyIsICJuX29iaXRvc19ldm8iLAogICJjYXNvc19zdXNwZWl0b3MiLCAiY2Fzb3Nfc3VzcGVpdG9zX2V2byIsICJjYXNvc19uYW9fY29uZmlybWFkb3MiLAogICMgImdyX2V0YXJpb18wXzkiLCAiZ3JfZXRhcmlvXzEwXzE5IiwgImdyX2V0YXJpb18yMF8yOSIsICJncl9ldGFyaW9fMzBfMzkiLAogICMgImdyX2V0YXJpb180MF80OSIsICJncl9ldGFyaW9fNTBfNTkiLCAiZ3JfZXRhcmlvXzYwXzY5IiwgImdyX2V0YXJpb183MF83OSIsCiAgIyAiZ3JfZXRhcmlvXzgwXyIsCiAgImFndWFyZGFfcmVzdWx0YWRvIiwgImFtb3N0cmFzIiwgImFtb3N0cmFzX25vdmFzIiwKICAiY2Fzb3Nfbm92b3MiLCAiZmlkIgopCm5hbWVzKGV4dHJhX2RhdGFzZXQpIDwtIGNvbG5hbWVzCmV4dHJhX2RhdGFzZXQkZGF0YV9yZWxhdG9yaW8gPC0gYXMuRGF0ZShhcy5QT1NJWGN0KGV4dHJhX2RhdGFzZXQkZGF0YV9yZWxhdG9yaW8gLyAxMDAwLCBvcmlnaW4gPSAiMTk3MC0wMS0wMSIpKQoKZXh0cmFfZGF0YXNldCA8LSBleHRyYV9kYXRhc2V0ICU+JQogIGFycmFuZ2UoZGF0YV9yZWxhdG9yaW8pICU+JQogIG11dGF0ZShpZF9vYmpldG8gPSAxOm4oKSkKYGBgCgpgYGB7ciBjaGVjayBkYXRhLCBldmFsPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIEludGVybmFsIHF1YWxpdHkgY2hlY2sgLS0tLQoKYnlfYWdlIDwtIGNhc2VzX2RhdGFzZXQgJT4lCiAgc2VsZWN0KHN0YXJ0c193aXRoKCJncl9ldGFyaW8iKSkgJT4lCiAgcm93U3VtcyhuYS5ybSA9IFQpCmJ5X3NleCA8LSBjYXNlc19kYXRhc2V0JGNhc29zX21hc2N1bGlub3MgKyBjYXNlc19kYXRhc2V0JGNhc29zX2ZlbWluaW5vcwpieV90cmFuc21pc3Npb24gPC0gY2FzZXNfZGF0YXNldCRjYXNvc19jb250YWN0byArIGNhc2VzX2RhdGFzZXQkY2Fzb3NfaW1wb3J0YWRvcwpieV9zdGF0dXMgPC0gY2FzZXNfZGF0YXNldCRyZWN1cGVyYWRvcyArIGNhc2VzX2RhdGFzZXQkbl9vYml0b3MgKyBjYXNlc19kYXRhc2V0JGNhc29zX2F0aXZvcwoKaWYgKCFpZGVudGljYWwoY2FzZXNfZGF0YXNldCRjYXNvc19jb25maXJtYWRvcywgYnlfc3RhdHVzKSkgewogIGVyciA8LSB3aGljaChjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zICE9IGJ5X3N0YXR1cykKCiAgZm9yIChuIGluIGVycikgewogICAgY2F0KHBhc3RlMCgKICAgICAgIkluY29uZ3J1w6puY2lhIG5vIGRpYSAiLCBjYXNlc19kYXRhc2V0JGRhdGFfcmVsYXRvcmlvW25dLAogICAgICAiIENvbmZpcm1hZG9zOiAiLCBjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zW25dLAogICAgICAiLCBhdGl2b3MgKyBvYml0b3MrIHJlY3VwZXJhZG9zOiAiLCBieV9zdGF0dXNbbl0sICJcbiIKICAgICkpCiAgfQp9CgppZiAoIWlkZW50aWNhbChjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zLCBieV9hZ2UpKSB7CiAgZXJyIDwtIHdoaWNoKGNhc2VzX2RhdGFzZXQkY2Fzb3NfY29uZmlybWFkb3MgIT0gYnlfYWdlKQoKICBmb3IgKG4gaW4gZXJyKSB7CiAgICBjYXQocGFzdGUwKAogICAgICAiSW5jb25ncnXDqm5jaWEgbm8gZGlhICIsIGNhc2VzX2RhdGFzZXQkZGF0YV9yZWxhdG9yaW9bbl0sCiAgICAgICIgQ29uZmlybWFkb3M6ICIsIGNhc2VzX2RhdGFzZXQkY2Fzb3NfY29uZmlybWFkb3Nbbl0sCiAgICAgICIsIFNvbWEgZGFzIGZhaXhhcyBldMOhcmlhczogIiwgYnlfYWdlW25dLCAiXG4iCiAgICApKQogIH0KfQoKaWYgKCFpZGVudGljYWwoY2FzZXNfZGF0YXNldCRjYXNvc19jb25maXJtYWRvcywgYnlfc2V4KSkgewogIGVyciA8LSB3aGljaChjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zICE9IGJ5X3NleCkKCiAgZm9yIChuIGluIGVycikgewogICAgY2F0KHBhc3RlMCgKICAgICAgIkluY29uZ3J1w6puY2lhIG5vIGRpYSAiLCBjYXNlc19kYXRhc2V0JGRhdGFfcmVsYXRvcmlvW25dLAogICAgICAiIENvbmZpcm1hZG9zOiAiLCBjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zW25dLAogICAgICAiLCBIb21lbnMgKyBNdWxoZXJlczogIiwgYnlfc2V4W25dLCAiXG4iCiAgICApKQogIH0KfQoKaWYgKCFpZGVudGljYWwoY2FzZXNfZGF0YXNldCRjYXNvc19jb25maXJtYWRvcywgYnlfdHJhbnNtaXNzaW9uKSkgewogIGVyciA8LSB3aGljaChjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zICE9IGJ5X3RyYW5zbWlzc2lvbikKCiAgZm9yIChuIGluIGVycikgewogICAgY2F0KHBhc3RlMCgKICAgICAgIkluY29uZ3J1w6puY2lhIG5vIGRpYSAiLCBjYXNlc19kYXRhc2V0JGRhdGFfcmVsYXRvcmlvW25dLAogICAgICAiIENvbmZpcm1hZG9zOiAiLCBjYXNlc19kYXRhc2V0JGNhc29zX2NvbmZpcm1hZG9zW25dLAogICAgICAiLCBDb250YXRvICsgSW1wb3J0YWRvczogIiwgYnlfdHJhbnNtaXNzaW9uW25dLCAiXG4iCiAgICApKQogIH0KfQpgYGAKCiMgRXh0ZW5kZWQgTW9kZWwKCkEgbW9yZSBjb21wbGV4IG1vZGVsIGlzIHByb3Bvc2VkIGJ5IFRpbSBDaHVyY2hlc1tAY2h1cmNoZXMyMDIwbW9kZWxsaW5nY292aWQxOXJwYXJ0Ml0sIGFkZGluZyBzZXZlcmFsIGNvbXBhcnRtZW50cyBhbmQgcGVybWl0IGEgYmV0dGVyIGV4cGxvcmF0aW9uIG9mIHRoZSBwb3RlbnRpYWwgZWZmZWN0cyBvZiB2YXJpb3VzIGNvbWJpbmF0aW9ucyBhbmQgdGltaW5ncyBvZiBpbnRlcnZlbnRpb25zIG9uIENPVklELTE5IHNwcmVhZC4KCkF0dGVudGlvbiB0byB0aGUgZGVzY3JpcHRpb24gb2YgZWFjaCBjb21wYXJ0bWVudDoKCnwgQ29tcGFydG1lbnQgfCBGdW5jdGlvbmFsIGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBTICAgICAgICAgICB8IFN1c2NlcHRpYmxlIGluZGl2aWR1YWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgRSAgICAgICAgICAgfCBFeHBvc2VkICoqYW5kKiogaW5mZWN0ZWQsIG5vdCB5ZXQgc3ltcHRvbWF0aWMgYnV0IHBvdGVudGlhbGx5IGluZmVjdGlvdXMgICAgICAgICAgfAp8IEkgICAgICAgICAgIHwgSW5mZWN0ZWQsIHN5bXB0b21hdGljICoqYW5kKiogaW5mZWN0aW91cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBRICAgICAgICAgICB8IEluZmVjdGlvdXMsIGJ1dCAoc2VsZi0paXNvbGF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgSCAgICAgICAgICAgfCBSZXF1aXJpbmcgaG9zcGl0YWxpc2F0aW9uICh3b3VsZCBub3JtYWxseSBiZSBob3NwaXRhbGlzZWQgaWYgY2FwYWNpdHkgYXZhaWxhYmxlKSAgfAp8IFIgICAgICAgICAgIHwgUmVjb3ZlcmVkLCBpbW11bmUgZnJvbSBmdXJ0aGVyIGluZmVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBGICAgICAgICAgICB8IENhc2UgZmF0YWxpdHkgKGRlYXRoIGR1ZSB0byBDT1ZJRC0xOSwgbm90IG90aGVyIGNhdXNlcykgICAgICAgICAgICAgICAgICAgICAgICAgICB8CgojIyBUcmFuc2l0aW9uIGRpYWdyYW0KCmBgYHtyIGZsb3cgY2hhcnQsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTEwLCBmaWcuYWxpZ249ImNlbnRlciJ9CmdyVml6KCIKZGlncmFwaCBTRUlRSFJGIHsKCiAgIyBhICdncmFwaCcgc3RhdGVtZW50CiAgZ3JhcGggW292ZXJsYXAgPSBmYWxzZSwgZm9udHNpemUgPSAxMiwgZm9udG5hbWUgPSBIZWx2ZXRpY2EKICBsYWJlbGxvYz0nYicsIGxhYmVsPSdcbkFkYXB0ZWQgZnJvbSB0aW1jaHVyY2hlcy5naXRodWIuaW8vYmxvZyddICMsIHJhbmtkaXIgPSBMUl0KCiAgIyBzZXZlcmFsICdub2RlJyBzdGF0ZW1lbnRzCiAgbm9kZSBbc2hhcGUgPSBib3gsIGZvbnRuYW1lID0gSGVsdmV0aWNhXQogIFNbbGFiZWw9J1M9U3VzY2VwdGlibGUnXTsKICBFW2xhYmVsPSdFPUV4cG9zZWQgYW5kIGluZmVjdGVkLFxuYXN5bXB0b21hdGljLFxucG90ZW50aWFsbHkgaW5mZWN0aW91cyddOwogIElbbGFiZWw9J0k9SW5mZWN0ZWQgYW5kIGluZmVjdGlvdXMnXTsKICBRW2xhYmVsPSdRPShTZWxmLSlpc29sYXRlZFxuKGluZmVjdGlvdXMpJ107CiAgSFtsYWJlbD0nSD1SZXF1aXJlc1xuaG9zcGl0YWxpc2F0aW9uJ107CiAgUltsYWJlbD0nUj1SZWNvdmVyZWQvaW1tdW5lJ107CiAgRltsYWJlbD0nRj1DYXNlIGZhdGFsaXR5J10KCiAgIyBzZXZlcmFsICdlZGdlJyBzdGF0ZW1lbnRzCiAgUy0+RVtsYWJlbD0nYSddCiAgSS0+U1tzdHlsZT0nZGFzaGVkJywgbGFiZWw9J3gnXQogIEUtPklbbGFiZWw9J2InXQogIEUtPlNbc3R5bGU9J2Rhc2hlZCcsIGxhYmVsPSd5J10KICBJLT5RW2xhYmVsPSdjJ10KICBRLT5TW3N0eWxlPSdkYXNoZWQnLCBsYWJlbD0neiddCiAgSS0+UltsYWJlbD0nZCddCiAgSS0+SFtsYWJlbD0nZSddCiAgSC0+RltsYWJlbD0nZiddCiAgSC0+UltsYWJlbD0nZyddCiAgUS0+UltsYWJlbD0naCddCiAgUS0+SFtsYWJlbD0naSddCn0KIikKYGBgCgojIyBQYXJhbWV0ZXJzCgpUaGVyZSBpcyAqKmEgbG90Kiogb2YgcGFyYW1ldGVycy4gV2Ugd2lsbCBzdGFydCB3aXRoIHRoZSBkZWZhdWx0cyBhbmQgYWRqdXN0IGFjY29yZGluZ2x5IHRvIG5ldyBldmlkZW5jZXMuCgpUaGUgZnVsbCBsaXN0IG9mIHBhcmFtZXRlcnMgaXMgYXZhaWxhYmxlIGluIHRoZSBzb3VyY2UgY29kZS4KCmBgYHtyIHBhcmFtZXRlcnMsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnBhcmFtX2RvY3MgPC0gdHJpYmJsZSgKICB+RGlhZ3JhbVJlZiwgflBhcmFtZXRlciwgfkRlZmF1bHQsIH5FeHBsYW5hdGlvbiwKICAiIiwgInR5cGUiLCAiU0VJUUhSRiIsICJUeXBlIG9mIG1vZGVsOiBTSSwgU0lSLCBTSVMsIFNFSVIsIFNFSVFIUiBhbmQgU0VJUUhSRiBhdmFpbGFibGUsIGJ1dCBvbmx5IFNFSVFIUkYgaXMgbGlrZWx5IHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgY29kZS4iLAoKICAiIiwgIm5zdGVwcyIsIDM2NiwgIk51bWJlciBvZiBkYXlzIGZvciBzaW11bGF0aW9uLiBOb3RlIHRoYXQgZGF5IDEgaXMgZm9yIGluaXRpYWxpc2F0aW9uLCBkYXkgMiBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSBzaW11bGF0aW9uLCBoZW5jZSBkZWZhdWx0IG9mIDM2NiBmb3IgMSB5ZWFyLiIsCgogICIiLCAibnNpbXMiLCAxMCwgIk51bWJlciBvZiBzaW11bGF0aW9ucyB0byBydW4gYW5kIHRoZW4gYXZlcmFnZS4iLAoKICAiIiwgIm5jb3JlcyIsIDEwLCAiTnVtYmVyIG9mIENQVSBjb3JlcyB0byB1c2UgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbi4iLAoKICAiYiIsICJwcm9nLnJhbmQiLCBGQUxTRSwgIk1ldGhvZCBmb3IgcHJvZ3Jlc3Npb24gZnJvbSBFIGNvbXBhcnRtZW50IHRvIEkuIElmIFRSVUUsIHJhbmRvbSBiaW5vbWlhbCBkcmF3cyBhdCBgcHJvZy5yYXRlYCwgaWYgRkFMU0UsIHJhbmRvbSBkcmF3cyBmcm9tIGEgV2VpYnVsbCBkaXN0cmlidXRpb24gKHllcywgSSBrbm93IGl0IHNob3VsZCBiZSBhIGRpc2NyZXRlIFdlaWJ1bGwgZGlzdHJpYnV0aW9uIGJ1dCBpdCBtYWtlcyBsaXR0bGUgZGlmZmVyZW5jZSBhbmQgc3BlZWQgb2YgY29tcHV0YXRpb24gbWF0dGVycyksIHdpdGggcGFyYW1ldGVycyBgcHJvZy5kaXN0LnNjYWxlYCBhbmQgIGBwcm9nLmRpc3Quc2hhcGVgIiwKCiAgImQsZyxoIiwgInJlYy5yYW5kIiwgRkFMU0UsICJNZXRob2QgZm9yIHJlY292ZXJ5IHRyYW5zaXRpb24gZnJvbSBJLCBRIG9yIEggdG8gUi4gSWYgVFJVRSwgcmFuZG9tIGJpbm9taWFsIGRyYXdzIGF0IGByZWMucmF0ZWAsIGlmIEZBTFNFLCByYW5kb20gZHJhd3MgZnJvbSBhIHJhbmRvbSBkcmF3cyBmcm9tIGEgV2VpYnVsbCBkaXN0cmlidXRpb24sIHdpdGggcGFyYW1ldGVycyBgcmVjLmRpc3Quc2NhbGVgIGFuZCAgYHJlYy5kaXN0LnNoYXBlYCIsCgogICJmIiwgImZhdC5yYW5kIiwgRkFMU0UsICJNZXRob2QgZm9yIGNhc2UgZmF0YWxpdHkgdHJhbnNpdGlvbiBmcm9tIEggdG8gRi4gSWYgVFJVRSwgcmFuZG9tIGJpbm9taWFsIGRyYXdzIGF0IGBmYXQucmF0ZS5iYXNlYCwgaWYgRkFMU0UsIHJhbmRvbSBzYW1wbGUgd2l0aCBhIHNhbXBsZSBmcmFjdGlvbiBhbHNvIGdpdmVuIGJ5IGBmYXQucmF0ZS5iYXNlYC4gSG93ZXZlciwgaWYgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHBhdGllbnRzIGluIHRoZSBIIChuZWVkcyBob3NwaXRhbGlzYXRpb24pIGNvbXBhcnRtZW50IGlzIGFib3ZlIGEgaG9zcGl0YWwgY2FwYWNpdHkgbGV2ZWwgc3BlY2lmaWVkIGJ5IGBob3NwLmNhcGAsIHRoZW4gdGhlIGZhdGFsaXR5IHJhdGUgaXMgdGhlIG1lYW4gb2YgdGhlIGJhc2UgZmF0YWxpdHkgcmF0ZSB3ZWlnaHRlZCBieSB0aGUgaG9zcGl0YWwgY2FwYWNpdHksIHBsdXMgYSBoaWdoZXIgcmF0ZSwgc3BlY2lmaWVkIGJ5IGBmYXQucmF0ZS5vdmVyY2FwYCwgd2VpZ2h0ZWQgYnkgdGhlIGJhbGFuY2Ugb2YgdGhvc2UgcmVxdWlyaW5nIGhvc3BpdGFsaXNhdGlvbiAoYnV0IHdobyBjYW4ndCBiZSBhY2NvbW1vZGF0ZWQpLiBCeSBzZXR0aW5nIGBmYXQucmF0ZS5vdmVyY2FwYCBoaWdoZXIsIHRoZSBlZmZlY3Qgb2YgZXhjZWVkaW5nIHRoZSBjYXBhY2l0eSBvZiB0aGUgaGVhbHRoIGNhcmUgc3lzdGVtIGNhbiBiZSBzaW11bGF0ZWQuIFRoZXJlIGlzIGFsc28gYSBjb2VmZmljaWVudCBgZmF0LnRjb2VmZmAgZm9yIHRoZSBmYXRhbGl0eSByYXRlcyB0aGF0IGluY3JlYXNlcyB0aGVtIGFzIGEgbGluZWFyIGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIgb2YgZGF5cyB0aGUgaW5kaXZpZHVhbCBoYXMgYmVlbiBpbiB0aGUgSCBjb21wYXJ0bWVudC4gVXNlIG9mIHRoZSBjby1lZmZpY2llbnQgYmV0dGVyIGFwcHJveGltYXRlcyB0aGUgdHJhcGV6b2lkIHN1cnZpdmFsIHRpbWUgZGlzdHJpYnV0aW9uIHR5cGljYWwgb2YgSUNVIHBhdGllbnRzLiIsCgogICJjIiwgInF1YXIucmFuZCIsIEZBTFNFLCAiTWV0aG9kIGZvciBzZWxmLWlzb2xhdGlvbiB0cmFuc2l0aW9uIGZyb20gSSB0byBRLiBJZiBUUlVFLCByYW5kb20gYmlub21pYWwgZHJhd3MgYXQgYHF1YXIucmF0ZWAsIGlmIEZBTFNFLCByYW5kb20gc2FtcGxlIHdpdGggYSBzYW1wbGUgZnJhY3Rpb24gYWxzbyBnaXZlbiBieSBgcXVhci5yYXRlLiIsCgogICJlLGkiLCAiaG9zcC5yYW5kIiwgRkFMU0UsICJNZXRob2QgZm9yIHRyYW5zaXRpb24gZnJvbSBJIG9yIFEgdG8gSCAtLSB0aGF0IGlzLCBmcm9tIGluZmVjdGlvdXMgb3IgZnJvbSBzZWxmLWlzb2xhdGVkIHRvIHJlcXVpcmluZyBob3NwaXRhbGlzYXRpb24uIElmIFRSVUUsIHJhbmRvbSBiaW5vbWlhbCBkcmF3cyBhdCBgaG9zcC5yYXRlYCwgaWYgRkFMU0UsIHJhbmRvbSBzYW1wbGUgd2l0aCBhIHNhbXBsZSBmcmFjdGlvbiBhbHNvIGdpdmVuIGJ5IGBob3NwLnJhdGUuIiwKCiAgImciLCAiZGlzY2gucmFuZCIsIEZBTFNFLCAiTWV0aG9kIGZvciB0cmFuc2l0aW9uIGZyb20gSCB0byBSIC0tIHRoYXQgaXMsIGZyb20gcmVxdWlyaW5nIGhvc3BpdGFsaXNhdGlvbiB0byByZWNvdmVyZWQuIElmIFRSVUUsIHJhbmRvbSBiaW5vbWlhbCBkcmF3cyBhdCBgZGlzY2gucmF0ZWAsIGlmIEZBTFNFLCByYW5kb20gc2FtcGxlIHdpdGggYSBzYW1wbGUgZnJhY3Rpb24gYWxzbyBnaXZlbiBieSBgZGlzY2gucmF0ZWAuIE5vdGUgdGhhdCB0aGUgb25seSB3YXkgb3V0IG9mIHRoZSAqKkgqKiBjb21wYXJ0bWVudCBpcyByZWNvdmVyeSBvciBkZWF0aC4gICIsCgogICIiLCAiaW5mZWN0aW9uLkZVTiIsICJpbmZlY3Rpb24uc2VpcWhyZi5pY20iLCAiTm8sIGJlaW5nIGluZmVjdGVkIHdpdGggU0FSUy1Db1YyIGlzICoqbm90KiogZnVuLiBSYXRoZXIgdGhpcyBpcyB0aGUgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBpbmZlY3Rpb24gcHJvY2Vzc2VzLiBVc2UgdGhlIGRlZmF1bHQuIiwKCiAgIiIsICJkZXBhcnR1cmVzLkZVTiIsICJkZXBhcnR1cmVzLnNlaXFocmYuaWNtIiwgIkhhbmRsZXMgYmFja2dyb3VuZCBkZW1vZ3JhcGhpY3MsIHNwZWNpZmljYWxseSBkZXBhcnR1cmVzIChkZWF0aHMgbm90IGR1ZSB0byB0aGUgdmlydXMsIGFuZCBlbWlncmF0aW9uKS4gVXNlIHRoZSBkZWZhdWx0LiIsCgogICIiLCAiYXJyaXZhbHMuRlVOIiwgImFycml2YWxzLmljbSIsICJIYW5kbGVzIGJhY2tncm91bmQgZGVtb2dyYXBoaWNzLCBzcGVjaWZpY2FsbHkgYXJyaXZhbHMgKGJpcnRocyBhbmQgaW1taWdyYXRpb24pLiBVc2VzIHRoZSBvcmlnaW5hbCBFcGlNb2RlbCBjb2RlIGN1cnJlbnRseS4gQSByZXBsYWNlbWVudCB0aGF0IGltcGxlbWVudHMgbW9kZWxsaW5nIHRoZSBhcnJpdmFsIG9mIGluZmVjdGVkIGluZGl2aWR1YWxzIGlzIHVuZGVyIGRldmVsb3BtZW50IC0tIGJ1dCBmb3Igbm93LCBhbGwgYXJyaXZhbHMgZ28gaW50byB0aGUgKipTKiogY29tcGFydG1lbnQuIiwKCiAgIiIsICJnZXRfcHJldi5GVU4iLCAiZ2V0X3ByZXYuc2VpcWhyZi5pY20iLCAiVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGNvbGxlY3RzIHByZXZhbGVuY2UgYW5kIHRyYW5zaXRpb24gdGltZSBkYXRhIGZyb20gZWFjaCBydW4gYW5kIHN0b3JlcyBpdCBhd2F5IGluIHRoZSBzaW11bGF0aW9uIHJlc3VsdCBvYmplY3QuIFVzZSB0aGUgZGVmYXVsdC4iLAoKICAiIiwgInMubnVtIiwgIjk5OTciLCAiSW5pdGlhbCBudW1iZXIgb2YgKipTKiBjb21wYXJ0bWVudCBpbmRpdmlkdWFscyBpbiB0aGUgc2ltdWxhdGVkIHBvcHVsYXRpb24uIEFuIG92ZXJhbGwgcG9wdWxhdGlvbiBvZiAxMCwwMDAgaXMgYSBnb29kIGNvbXByb21pc2UuIEEgc2V0IG9mIG1vZGVscyB3aWxsIHN0aWxsIHRha2Ugc2V2ZXJhbCBtaW51dGVzIG9yIG1vcmUgdG8gcnVuLCBpbiBwYXJhbGxlbC4gIiwKCiAgIiIsICJlLm51bSIsICIwIiwgIkluaXRpYWwgbnVtYmVyIG9mICoqRSoqIGNvbXBhcnRtZW50IGluZGl2aWR1YWxzIGluIHRoZSBzaW11bGF0ZWQgcG9wdWxhdGlvbi4iLAoKICAiIiwgImkubnVtIiwgIjMiLCAiSW5pdGlhbCBudW1iZXIgb2YgKipJKiogY29tcGFydG1lbnQgaW5kaXZpZHVhbHMgaW4gdGhlIHNpbXVsYXRlZCBwb3B1bGF0aW9uLiIsCgogICIiLCAicS5udW0iLCAiMCIsICJJbml0aWFsIG51bWJlciBvZiAqKlEqKiBjb21wYXJ0bWVudCBpbmRpdmlkdWFscyBpbiB0aGUgc2ltdWxhdGVkIHBvcHVsYXRpb24uIiwKCiAgIiIsICJoLm51bSIsICIwIiwgIkluaXRpYWwgbnVtYmVyIG9mICoqSCoqIGNvbXBhcnRtZW50IGluZGl2aWR1YWxzIGluIHRoZSBzaW11bGF0ZWQgcG9wdWxhdGlvbi4iLAoKICAiIiwgInIubnVtIiwgIjAiLCAiSW5pdGlhbCBudW1iZXIgb2YgKipSKiogY29tcGFydG1lbnQgaW5kaXZpZHVhbHMgaW4gdGhlIHNpbXVsYXRlZCBwb3B1bGF0aW9uLiIsCgogICIiLCAiZi5udW0iLCAiMCIsICJJbml0aWFsIG51bWJlciBvZiAqKkYqKiBjb21wYXJ0bWVudCBpbmRpdmlkdWFscyBpbiB0aGUgc2ltdWxhdGVkIHBvcHVsYXRpb24uIiwKCiAgIngiLCAiYWN0LnJhdGUuaSIsICIxMCIsICJUaGUgbnVtYmVyIG9mIGV4cG9zdXJlIGV2ZW50cyAoX2FjdHNfKSBiZXR3ZWVuIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW4gdGhlICoqSSoqIGNvbXBhcnRtZW50IGFuZCBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBpbiB0aGUgKipTKiogY29tcGFydG1lbnQsIHBlciBkYXkuIEl0J3Mgc3RvY2hhc3RpYywgc28gdGhlIHJhdGUgaXMgYW4gYXZlcmFnZSwgc29tZSBpbmRpdmlkdWFscyBtYXkgaGF2ZSBtb3JlIG9yIGxlc3MuIE5vdGUgdGhhdCBub3QgZXZlcnkgZXhwb3N1cmUgZXZlbnQgcmVzdWx0cyBpbiBpbmZlY3Rpb24gLSB0aGF0IGlzIGdvdmVybmVkIGJ5IHRoZSBgaW5mLnByb2IuaWAgcGFyYW1ldGVycyAoc2VlIGJlbG93KS4gUmVkdWNpbmcgYGFjdC5yYXRlLmlgIGlzIGVxdWl2YWxlbnQgdG8gaW5jcmVhc2luZyBzb2NpYWwgZGlzdGFuY2luZyBieSBwZW9wbGUgaW4gdGhlICoqSSoqIGNvbXBhcnRtZW50LiIsCgogICJ4IiwgImluZi5wcm9iLmkiLCAiMC4wNSIsICJQcm9iYWJpbGl0eSBvZiBwYXNzaW5nIG9uIGluZmVjdGlvbiBhdCBlYWNoIGV4cG9zdXJlIGV2ZW50IGZvciBpbnRlcmFjdGlvbnMgYmV0d2VlbiBpbmZlY3Rpb3VzIHBlb3BsZSBpbiB0aGUgKipJKiogY29tcGFydG1lbnQgYW5kIHN1c2NlcHRpYmxlcyBpbiAqKlMqKi4gUmVkdWNpbmcgYGluZi5wcm9iLmlgIGlzIGVxdWl2YWxlbnQgdG8gaW5jcmVhc2luZyBoeWdpZW5lIG1lYXN1cmVzLCBzdWNoIGFzIG5vdCBwdXR0aW5nIGhhbmRzIGluIGV5ZXMsIG5vc2Ugb3IgbW90aCwgdXNlIG9mIGhhbmQgc2FuaXRpc2Vycywgd2VhcmluZyBtYXNrcyBieSB0aGUgaW5mZWN0ZWQsIGFuZCBzbyBvbi4iLAoKICAieSIsICJhY3QucmF0ZS5lIiwgIjEwIiwgIlRoZSBudW1iZXIgb2YgZXhwb3N1cmUgZXZlbnRzIChfYWN0c18pIGJldHdlZW4gaW5mZWN0aW91cyBpbmRpdmlkdWFscyBpbiB0aGUgKipFKiogY29tcGFydG1lbnQgYW5kIHN1c2NlcHRpYmxlIGluZGl2aWR1YWxzIGluIHRoZSAqKlMqKiBjb21wYXJ0bWVudCwgcGVyIGRheS4gT3RoZXJ3aXNlIGFzIGZvciBgYWN0LnJhdGUuaWAuIiwKCiAgInkiLCAiaW5mLnByb2IuZSIsICIwLjAyIiwgIlByb2JhYmlsaXR5IG9mIHBhc3Npbmcgb24gaW5mZWN0aW9uIGF0IGVhY2ggZXhwb3N1cmUgZXZlbnQgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIGluZmVjdGlvdXMgcGVvcGxlIGluIHRoZSAqKkUqKiBjb21wYXJ0bWVudCBhbmQgc3VzY2VwdGlibGVzIGluICoqUyoqLiBOb3RlIHRoZSBkZWZhdWx0IGlzIGxvd2VyIHRoYW4gZm9yIGBpbmYucHJvYi5pYCByZWZsZWN0aW5nIHRoZSByZWR1Y2VkIGluZmVjdGl2aXR5IG9mIGluZmVjdGVkIGJ1dCBhc3ltcHRvbWF0aWMgcGVvcGxlICh0aGUgKipFKiogY29tcGFydG1lbnQpLiBPdGhlcndpc2UgYXMgZm9yIGBpbmYucHJvYi5pYC4iLAoKICAieiIsICJhY3QucmF0ZS5xIiwgIjIuNSIsICJUaGUgbnVtYmVyIG9mIGV4cG9zdXJlIGV2ZW50cyAoX2FjdHNfKSBiZXR3ZWVuIGluZmVjdGlvdXMgaW5kaXZpZHVhbHMgaW4gdGhlICoqUSoqIGNvbXBhcnRtZW50IChpc29sYXRlZCwgc2VsZiBvciBvdGhlcndpc2UpIGFuZCBzdXNjZXB0aWJsZSBpbmRpdmlkdWFscyBpbiB0aGUgKipTKiogY29tcGFydG1lbnQsIHBlciBkYXkuIE5vdGUgdGhlIG11Y2ggbG93ZXIgcmF0ZSB0aGFuIGZvciB0aGUgKipJKiogYW5kICoqRSoqIGNvbXBhcnRtZW50cywgcmVmbGVjdGluZyB0aGUgbXVjaCBncmVhdGVyIGRlZ3JlZSBvZiBzb2NpYWwgaXNvbGF0aW9uIGZvciBzb21lb25lIGluIChzZWxmLSlpc29sYXRpb24uIFRoZSBleHBvc3VyZSBldmVudCByYXRlIGlzIG5vdCB6ZXJvIGZvciB0aGlzIGdyb3VwLCBqdXN0IG11Y2ggbGVzcy4gT3RoZXJ3aXNlIGFzIGZvciBgYWN0LnJhdGUuaWAuIiwKCiAgInoiLCAiaW5mLnByb2IucSIsICIwLjAyIiwgIlByb2JhYmlsaXR5IG9mIHBhc3Npbmcgb24gaW5mZWN0aW9uIGF0IGVhY2ggZXhwb3N1cmUgZXZlbnQgZm9yIGludGVyYWN0aW9ucyBiZXR3ZWVuIGluZmVjdGlvdXMgcGVvcGxlIGluIHRoZSAqKlEqKiBjb21wYXJ0bWVudCBhbmQgc3VzY2VwdGlibGVzIGluICoqUyoqLiBOb3RlIHRoZSBkZWZhdWx0IGlzIGxvd2VyIHRoYW4gZm9yIGBpbmYucHJvYi5pYCByZWZsZWN0aW5nIHRoZSBncmVhdGVyIGNhcmUgdGhhdCBzZWxmLWlzb2xhdGVkIGluZGl2aWR1YWxzIHdpbGwsIG9uIGF2ZXJhZ2UsIHRha2UgcmVnYXJkaW5nIGh5Z2llbmUgbWVhc3VyZXMsIHN1Y2ggYXMgd2VhcmluZyBtYXNrcywgdG8gbGltaXQgc3ByZWFkIHRvIG90aGVycy4gT3RoZXJ3aXNlIGFzIGZvciBgaW5mLnByb2IuaWAuIiwKCiAgImMiLCAicXVhci5yYXRlIiwgIjEvMzAiLCAiUmF0ZSBwZXIgZGF5IGF0IHdoaWNoIHN5bXB0b21hdGljIChvciB0ZXN0ZWQgcG9zaXRpdmUpLCBpbmZlY3RlZCAqKkkqKiBjb21wYXJ0bWVudCBwZW9wbGUgZW50ZXIgc2VsZi1pc29sYXRpb24gKCoqUSoqIGNvbXBhcnRtZW50KS4gQXN5bXB0b21hdGljICoqRSoqIGNvbXBhcnRtZW50IHBlb3BsZSBjYW4ndCBlbnRlciBzZWxmLWlzb2xhdGlvbiBiZWNhdXNlIHRoZXkgZG9uJ3QgeWV0IGtub3cgdGhleSBhcmUgaW5mZWN0ZWQuIERlZmF1bHQgaXMgYSBsb3cgcmF0ZSByZWZsZWN0aW5nIGxvdyBjb21tdW5pdHkgYXdhcmVuZXNzIG9yIGNvbXBsaWFuY2Ugd2l0aCBzZWxmLWlzb2xhdGlvbiByZXF1aXJlbWVudHMgb3IgcHJhY3RpY2VzLCBidXQgdGhpcyBjYW4gYmUgdHdlYWtlZCB3aGVuIGV4cGxvcmluZyBzY2VuYXJpb3MuIiwKCiAgImUsaSIsICJob3NwLnJhdGUiLCAiMS8xMDAiLCAiUmF0ZSAqKnBlciBkYXkqKiBhdCB3aGljaCBzeW1wdG9tYXRpYyAob3IgdGVzdGVkIHBvc2l0aXZlKSwgaW5mZWN0ZWQgKipJKiogY29tcGFydG1lbnQgcGVvcGxlIG9yIHNlbGYtaXNvbGF0ZWQgKipRKiogY29tcGFydG1lbnQgcGVvcGxlIGVudGVyIHRoZSBzdGF0ZSBvZiByZXF1aXJpbmcgaG9zcGl0YWwgY2FyZSAtLSB0aGF0IGlzLCBiZWNvbWUgc2VyaW91cyBjYXNlcy4gQSBkZWZhdWx0IHJhdGUgb2YgMSUgcGVyIGRheSB3aXRoIGFuIGF2ZXJhZ2UgaWxsbmVzcyBkdXJhdGlvbiBvZiBhYm91dCAxMCBkYXlzIG1lYW5zIGEgYml0IGxlc3MgdGhhbiAxMCUgb2YgY2FzZXMgd2lsbCByZXF1aXJlIGhvc3BpdGFsaXNhdGlvbiwgd2hpY2ggc2VlbXMgYWJvdXQgcmlnaHQgKGJ1dCBjYW4gYmUgdHdlYWtlZCwgb2YgY291cnNlKS4iLAoKICAiZyIsICJkaXNjaC5yYXRlIiwgIjEvMTUiLCAiUmF0ZSBwZXIgZGF5IGF0IHdoaWNoIHBlb3BsZSBuZWVkaW5nIGhvc3BpdGFsaXNhdGlvbiByZWNvdmVyLiIsCgogICJiIiwgInByb2cucmF0ZSIsICIxLzEwIiwgIlJhdGUgcGVyIGRheSBhdCB3aGljaCBwZW9wbGUgd2hvIGFyZSBpbmZlY3RlZCBidXQgYXN5bXB0b21hdGljICgqKkUqKiBjb21wYXJ0bWVudCkgcHJvZ3Jlc3MgdG8gYmVjb21pbmcgc3ltcHRvbWF0aWMgKG9yIHRlc3QtcG9zaXRpdmUpLCB0aGUgKipJKiogY29tcGFydG1lbnQuIFNlZSBgcHJvZy5yYW5kYCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLiIsCgogICJiIiwgInByb2cuZGlzdC5zY2FsZSIsICI1IiwgIlNjYWxlIHBhcmFtZXRlciBmb3IgV2VpYnVsbCBkaXN0cmlidXRpb24gZm9yIHByb2dyZXNzaW9uLCBzZWUgYHByb2cucmFuZGAgZm9yIGRldGFpbHMuIiwKCiAgImIiLCAicHJvZy5kaXN0LnNoYXBlIiwgIjEuNSIsICJTaGFwZSBwYXJhbWV0ZXIgZm9yIFdlaWJ1bGwgZGlzdHJpYnV0aW9uIGZvciBwcm9ncmVzc2lvbiwgc2VlIGBwcm9nLnJhbmRgIGZvciBkZXRhaWxzLiBSZWFkIHVwIG9uIHRoZSBXZWlidWxsIGRpc3RyaWJ1dGlvbiBiZWZvcmUgY2hhbmdpbmcgdGhlIGRlZmF1bHQuIiwKCiAgImQiLCAicmVjLnJhdGUiLCAiMS8yMCIsICJSYXRlIHBlciBkYXkgYXQgd2hpY2ggcGVvcGxlIHdobyBhcmUgaW5mZWN0ZWQgYW5kIHN5bXB0b21hdGljICgqKkkqKiBjb21wYXJ0bWVudCkgcmVjb3ZlciwgdGh1cyBlbnRlcmluZyB0aGUgKipSKiogY29tcGFydG1lbnQuIFNlZSBgcmVjLnJhbmRgIGFib3ZlIGZvciBtb3JlIGRldGFpbHMuIiwKCiAgImQiLCAicmVjLmRpc3Quc2NhbGUiLCAiMzUiLCAiU2NhbGUgcGFyYW1ldGVyIGZvciBXZWlidWxsIGRpc3RyaWJ1dGlvbiBmb3IgcmVjb3ZlcnksIHNlZSBgcmVjLnJhbmRgIGZvciBkZXRhaWxzLiIsCgogICJkIiwgInJlYy5kaXN0LnNoYXBlIiwgIjEuNSIsICJTaGFwZSBwYXJhbWV0ZXIgZm9yIFdlaWJ1bGwgZGlzdHJpYnV0aW9uIGZvciByZWNvdmVyeSwgc2VlIGByZWMucmFuZGAgZm9yIGRldGFpbHMuIFJlYWQgdXAgb24gdGhlIFdlaWJ1bGwgZGlzdHJpYnV0aW9uIGJlZm9yZSBjaGFuZ2luZyB0aGUgZGVmYXVsdC4iLAoKICAiZiIsICJmYXQucmF0ZS5iYXNlIiwgIjEvNTAiLCAiQmFzZWxpbmUgbW9ydGFsaXR5IHJhdGUgcGVyIGRheSBmb3IgcGVvcGxlIG5lZWRpbmcgaG9zcGl0YWxpc2F0aW9uIChkZWF0aHMgZHVlIHRvIHRoZSB2aXJ1cykuIFNlZSBgZmF0LnJhbmRgIGZvciBtb3JlIGRldGFpbHMuIiwKCiAgImYiLCAiaG9zcC5jYXAiLCAiNDAiLCAiTnVtYmVyIG9mIGF2YWlsYWJsZSBob3NwaXRhbCBiZWRzIGZvciB0aGUgbW9kZWxsZWQgcG9wdWxhdGlvbi4gU2VlIGBmYXQucmFuZGAgZm9yIG1vcmUgZGV0YWlscy4iLAoKICAiZiIsICJmYXQucmF0ZS5vdmVyY2FwIiwgIjEvMjUiLCAiTW9ydGFsaXR5IHJhdGUgcGVyIGRheSBmb3IgcGVvcGxlIG5lZWRpbmcgaG9zcGl0YWxpc2F0aW9uIGJ1dCB3aG8gY2FuJ3QgZ2V0IGludG8gaG9zcGl0YWwgZHVlIHRvIHRoZSBob3NwaXRhbHMgYmVpbmcgZnVsbCAoc2VlIGBob3NwLmNhcGAgYW5kIGBmYXQucmFuZGApLiBUaGUgZGVmYXVsdCByYXRlIGlzIHR3aWNlIHRoYXQgZm9yIHRob3NlIHdobyBkbyBnZXQgaW50byBob3NwaXRhbC4iLAoKICAiZiIsICJmYXQudGNvZWZmIiwgIjAuNSIsICJUaW1lIGNvLWVmZmljaWVudCBmb3IgaW5jcmVhc2luZyBtb3J0YWxpdHkgcmF0ZSBhcyB0aW1lIGluIHRoZSAqKkgqKiBjb21wYXJ0bWVudCBpbmNyZWFzZXMgZm9yIGVhY2ggaW5kaXZpZHVhbCBpbiBpdC4gU2VlIGBmYXQucmFuZGAgZm9yIGRldGFpbHMuIiwKCiAgIiIsICJ2aXRhbCIsICJUUlVFIiwgIkVuYWJsZXMgZGVtb2dyYXBoaWNzLCB0aGF0IGlzLCBhcnJpdmFscyBhbmQgZGVwYXJ0dXJlcywgdG8gYW5kIGZyb20gdGhlIHNpbXVsYXRlZCBwb3B1bGF0aW9uLiIsCgogICIiLCAiYS5yYXRlIiwgIigxMC41LzM2NSkvMTAwMCIsICJCYWNrZ3JvdW5kIGRlbW9ncmFwaGljIGFycml2YWwgcmF0ZS4gQ3VycmVudGx5IGFsbCBhcnJpdmFscyBnbyBpbnRvIHRoZSAqKlMqKiBjb21wYXJ0bWVudCwgdGhlIGRlZmF1bHQgaXMgYXBwcm94aW1hdGVseSB0aGUgZGFpbHkgYmlydGggcmF0ZSBmb3IgQXVzdHJhbGlhLiBXaWxsIGJlIGV4dGVuZGVkIHRvIGNvdmVyIGltbWlncmF0aW9uIGluIGZ1dHVyZSB2ZXJzaW9ucy4iLAoKICAiIiwgImRzLnJhdGUsIGRlLnJhdGUsIGRlLnJhdGUsIGRxLnJhdGUsIGRoLnJhdGUsIGRyLnJhdGUiLCAidmFyaW91cyByYXRlcyIsICJCYWNrZ3JvdW5kIGRlbW9ncmFwaGljIGRlcGFydHVyZSAoZGVhdGggbm90IGR1ZSB0byB2aXJ1cykgcmF0ZXMuIERlZmF1bHRzIGJhc2VkIG9uIEF1c3RyYWxpYW4gY3J1ZGUgZGVhdGggcmF0ZXMuIENhbiBiZSB1c2VkIHRvIG1vZGVsIGVtaWdyYXRpb24gYXMgd2VsbCBhcyBkZWF0aHMuIiwKCiAgIiIsICJvdXQiLCAibWVhbiIsICJTdW1tYXJ5IGZ1bmN0aW9uIGZvciB0aGUgc2ltdWxhdGlvbiBydW5zLiBtZWRpYW4gaXMgYWxzbyBhdmFpbGFibGUsIG9yIHBlcmNlbnRpbGVzLCBzZWUgdGhlIGBFcGlNb2RlbGAgZG9jdW1lbnRhdGlvbi4iLAopCnBhcmFtX2RvY3MgJT4lCiAgZ3QoKSAlPiUKICBmbXRfbWFya2Rvd24oY29sdW1ucyA9IFRSVUUpICU+JQogIHRhYl9vcHRpb25zKHRhYmxlLndpZHRoID0gcGN0KDkwKSkKYGBgCgojIyBUaW1lLXZhcmlhbnQgcGFyYW1ldGVycwoKU2V2ZXJhbCBvZiB0aGUgc2ltdWxhdGlvbiBwYXJhbWV0ZXJzIGNhbiBhbHNvIGJlIHZhcmllZCBvdmVyIHRpbWUuIFRoYXQgaXMsIGFzIHdlbGwgYXMgYWNjZXB0aW5nIGEgc2luZ2xlIHZhbHVlLCB0aGV5IGFsc28gYWNjZXB0IGEgdmVjdG9yIG9mIHZhbHVlcyB3aXRoIGxlbmd0aCBlcXVhbCB0byBgbnN0ZXBzYCwgdGhlIG51bWJlciBvZiBkYXlzIG92ZXIgd2hpY2ggdGhlIHNpbXVsYXRpb24gcnVucy4gQXNzdW1pbmcgYG5zdGVwcz0zNjZgLCB3ZSBjYW4sIGZvciBleGFtcGxlLCBzZXQgYHF1YXIucmF0ZSA9IGMocmVwKDEvMTAsMzApLCByZXAoMS8zLCAzMzUpKWAuIFRoYXQgZGVmaW5lcyBhIHN0ZXAgZnVuY3Rpb24gaW4gd2hpY2ggdGhlIHRyYW5zaXRpb24tdG8taXNvbGF0aW9uIHJhdGUgZm9yIHRoZSAqKkkqKiBjb21wYXJ0bWVudCBpcyAwLjEgZm9yIHRoZSBmaXJzdCAzMCBkYXlzLCB0aGVuIHN0ZXBzIHVwIHRvIDAuMzMgdGhlcmVhZnRlciwgcmVmbGVjdGluZywgc2F5LCBhIGNhbXBhaWduIG9yIGdvdmVybm1lbnQgZWRpY3QgdG8gc2VsZi1pc29sYXRlLiBPZiBjb3Vyc2UsIHRoZSB2ZWN0b3Igb2YgdmFsdWVzIGNhbiBiZSBhIHNtb290aCBmdW5jdGlvbiwgb3IgY2FuIGdvIHVwIHRoZW4gZG93biBhZ2Fpbiwgb3Igd2hhdGV2ZXIgeW91IHdpc2ggdG8gbW9kZWwuIFRoaXMgaXMgYW4gZXh0cmVtZWx5IHBvd2VyZnVsIGZlYXR1cmUgb2YgY29tcHV0YXRpb25hbCBtb2RlbHMgc3VjaCBhcyB0aGlzLCBhbmQgb25lIHZlcnkgaGFyZCB0byBpbmNvcnBvcmF0ZSBpbnRvIHB1cmVseSBtYXRoZW1hdGljYWwgbW9kZWxzLgoKTW9zdCBvZiB0aGUgcGFyYW1ldGVycyBmb3Igd2hpY2ggdGltZS12YXJpYXRpb24gaXMgdXNlZnVsIHN1cHBvcnQgaXQuIElmIHRoZXkgZG9uJ3QsIHlvdSB3aWxsIHJlY2VpdmUgYW4gZXJyb3IgbWVzc2FnZSAodGhlIHRhYmxlIGFib3ZlIHdpbGwgYmUgdXBkYXRlZCB0byBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gbGF0ZXIpLgoKIyBFdmlkZW5jZQoKIyMgQ09WSUQtcmVsYXRlZApMYXN0IGNoZWNrZWQ6IDIwMjAtMDQtMTEKCi0gUmVjb3ZlcnkgKGgsIGQpID0gdGFrZXMgYXQgbGVhc3QgMTUgZGF5cwotIEV4cG9zaXRpb24gdG8gc3ltcHRvbXMgKGIpID0gbWVkaWFuIG9mIDUKLSBJbmN1YmF0aW9uIHBlcmlvZDogNS4xICgyLjIgLSAxMS41KVtAMjAxOV9ub3ZlbF9jb3JvbmF2aXJ1c10KLSBTeW1wdG9tcyB0byBkZWF0aDogfjE1ICgxMSAtIDE3KSAoU28sIEluZmVjdGlvbiB0byBkZWF0aCB+MjAgZGF5cylbQDIwMTlfbm92ZWxfY29yb25hdmlydXNdCi0gRGF5cyB0byBkb3VibGU6IDgtOSAoQ2FzZSByZXBvcnQgZXN0aW1hdGlvbiBpcyAzMS00OCUgYXQgMjAyMC0wNC0xMSwgZm9yIFIgMS4zIGFuZCBDRlIgMi4wW0BpbmZlcnJpbmctY292aWQxOS1jYXNlcy1mcm9tLWRlYXRoc10pCi0gTW9ydGFsaXR5IHJhdGU6IDAuODUgLSAxLjMxJVtAaW5mZXJyaW5nLWNvdmlkMTktY2FzZXMtZnJvbS1kZWF0aHNdCgojIEJhc2VsaW5lIHNpbXVsYXRpb24KCiMjIFBhcmFtZXRlcnMgdXNlZAoKLSBQb3B1bGF0aW9uOiAzLDU3NCwzOTQgKGVzdGltYXRpb24gb2YgMjAxOSBmcm9tIENlbnN1cylbQDIwMjBfaW5lXQotIEJpcnRoIHJhdGU6IDcuNyDigLAgW0AyMDIwX2luZV0KLSBCYXNlbGluZSBkZWF0aCByYXRlIChhbnkgY2F1c2UpOiA5Ljg2IOKAsCBbQDIwMjBfdHJhbnNwYXJlbmNpYV0KLSBCYXNlbGluZSBob3NwaXRhbCBkZWF0aCByYXRlIChhbnkgY2F1c2UpOiA1MC41IOKAsCBbQDIwMjBfdHJhbnNwYXJlbmNpYV0KLSBSYXRlcyBvZiBleHBvc2l0aW9uICh0YWJsZSBiZWxvdykKLSBSZXBvcnQgcmF0ZSAodGFibGUgYmVsb3cpCi0gQWdlcyBhbmQgc2V2ZXJpdHkgKHRhYmxlIGJlbG93KQoKPGJyLz48YnIvPgoKYGBge3J9CmV2ZW50cyA8LSB0cmliYmxlKAogIH5pZHgsIH5kYXRlcywgfnBvcywgfnJhdGUuZSwgfnJhdGUuaSwgfmxhYmVscywKICAxNiwgIjIwMjAtMDMtMDgiLCAxMCwgMTYsIDEwLCAiU3VzcGVuc2lvbiBvZiB2aXNpdHMgdG8gaGVhbHRoIGZhY2lsaXRpZXMgYW5kIHByaXNvbnMiLAogIDE4LCAiMjAyMC0wMy0xMCIsIDE1LCAxNSwgMTAsICJTdXNwZW5zaW9uIG9mIGZsaWdodHMgZnJvbSB0aGUgbW9zdCBhZmZlY3RlZCBhcmVhcyBvZiBJdGFseSIsCiAgMTksICIyMDIwLTAzLTExIiwgMTcsIDE1LCAxMCwgIldITyBkZWNsYXJlcyBwYW5kZW1pYyIsCiAgMjEsICIyMDIwLTAzLTEzIiwgMjAsIDEwLCA3LCAiUG9ydHVnYWwgYWxlcnQgc3RhdHVzIHN0YXRlbWVudCIsCiAgMjEsICIyMDIwLTAzLTEzIiwgMjUsIDEwLCA3LCAiQ2xvc2luZyBvZiBtdXNldW1zIiwKICAyMywgIjIwMjAtMDMtMTUiLCAzMCwgNywgNSwgIlJlc3RyaWN0aW9ucyBvbiBhY2Nlc3MgdG8gY29tbWVyY2lhbCBzcGFjZXMiLAogIDI0LCAiMjAyMC0wMy0xNiIsIDM1LCA1LCAzLCAiU3VzcGVuc2lvbiBvZiBjbGFzc2VzIiwKICAyNCwgIjIwMjAtMDMtMTYiLCA0MCwgNSwgMywgIkNsb3NlIGxhbmQgYm9yZGVycyIsCiAgMjYsICIyMDIwLTAzLTE4IiwgNDUsIDUsIDIsICJEZWNsYXJhdGlvbiBvZiBzdGF0ZSBvZiBlbWVyZ2VuY3kiLAogIDQxLCAiMjAyMC0wNC0wMiIsIDUwLCAzLCAyLCAiRXh0ZW5zaW9uIG9mIHRoZSBzdGF0ZSBvZiBlbWVyZ2VuY3kiCikKCmV2ZW50cyAlPiUKICBzZWxlY3QoZGF0ZXMsIGxhYmVscywgcmF0ZS5lLCByYXRlLmkpICU+JQogIG11dGF0ZShyYXRlLnEgPSByYXRlLmkgLyAyKSAlPiUKICBkaXN0aW5jdChkYXRlcywgLmtlZXBfYWxsID0gVFJVRSkgJT4lCiAgZ3QoKSAlPiUKICBjb2xzX2xhYmVsKGRhdGVzID0gbWQoIioqRGF0ZSoqIiksIGxhYmVscyA9IG1kKCIqKkV2ZW50KioiKSwgcmF0ZS5lID0gbWQoIioqRS1TKioiKSwgcmF0ZS5pID0gbWQoIioqSS1TKioiKSwgcmF0ZS5xID0gbWQoIioqUS1TKioiKSkgJT4lCiAgZm10X2RhdGUodmFycyhkYXRlcyksIGRhdGVfc3R5bGUgPSAiZGF5X21vbnRoIikgJT4lCiAgdGFiX2hlYWRlcihtZCgiKipJbnRlcmFjdGlvbiByYXRlcyBiZXR3ZWVuIGNvbXBhcnRtZW50cyoqIikpICU+JQogIHRhYl9vcHRpb25zKHRhYmxlLndpZHRoID0gcGN0KDgwKSkKYGBgCgpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXRlcwpgYGAKCjxici8+PGJyLz48YnIvPgoKYGBge3J9CmFnZXMgPC0gdHJpYmJsZSgKICB+YWdlLCB+cGVyY2VudCwgfnNldmVyaXR5LAogIDAsIDAuMDgwMzQwNzUxLCAxLAogIDEsIDAuMTAzNDQzMzYzLCAxLAogIDIsIDAuMTExNjQzNTkyLCAxLAogIDMsIDAuMTIzNTQxNzA2LCAxLAogIDQsIDAuMTU1MTM0MjU0LCAxLAogIDUsIDAuMTUzNjIzNTgzLCAxLAogIDYsIDAuMTI3NTY2ODA1LCAyLAogIDcsIDAuMDg2ODM5OTcsIDMsCiAgOCwgMC4wNTc4NjU5NzUsIDQKKQoKCgphZ2VzICU+JQogIG11dGF0ZShhZ2UgPSBwYXN0ZTAoIj49IiwgYWdlICogMTApLCBzZXZlcml0eSA9IHNldmVyaXR5ICogMS4zIC8gMTAwKSAlPiUKICBndCgpICU+JQogIGNvbHNfbGFiZWwoYWdlID0gbWQoIioqQWdlcyoqIiksIHBlcmNlbnQgPSBtZCgiKipQcmV2YWxlbmNlKioiKSwgc2V2ZXJpdHkgPSBtZCgiKipGYXRhbGl0eSByYXRlKioiKSkgJT4lCiAgZm10X3BlcmNlbnQoY29sdW1ucyA9IGMoInBlcmNlbnQiLCAic2V2ZXJpdHkiKSkgJT4lCiAgdGFiX2hlYWRlcihtZCgiKipBZ2UgcGlyYW1pZCBhbmQgZGlzZWFzZSBmYXRhbGl0eSByYXRlKioiKSkgJT4lCiAgdGFiX29wdGlvbnModGFibGUud2lkdGggPSBwY3QoNTApKQpgYGAKCjxici8+PGJyLz48YnIvPgoKYGBge3Igc2ltdWxhdGlvbiBmdW5jdGlvbiwgaW5jbHVkZT1GQUxTRX0KIyBmdW5jdGlvbiB0byBzZXQtdXAgYW5kIHJ1biB0aGUgYmFzZWxpbmUgc2ltdWxhdGlvbnMKc2ltdWxhdGUgPC0gZnVuY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgICMgY29udHJvbC5pY20gcGFyYW1zCiAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiU0VJUUhSRiIsCiAgICAgICAgICAgICAgICAgICAgIG5zdGVwcyA9IDM2NiwKICAgICAgICAgICAgICAgICAgICAgbnNpbXMgPSA4LAogICAgICAgICAgICAgICAgICAgICBuY29yZXMgPSAxLAogICAgICAgICAgICAgICAgICAgICBhZ2VzID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgIHByb2cucmFuZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICByZWMucmFuZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICBmYXQucmFuZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgIHF1YXIucmFuZCA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICBob3NwLnJhbmQgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgZGlzY2gucmFuZCA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgIGluZmVjdGlvbi5GVU4gPSBpbmZlY3Rpb24uc2VpcWhyZi5pY20sCiAgICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5LkZVTiA9IHByb2dyZXNzLnNlaXFocmYuaWNtLAogICAgICAgICAgICAgICAgICAgICBkZXBhcnR1cmVzLkZVTiA9IGRlcGFydHVyZXMuc2VpcWhyZi5pY20sCiAgICAgICAgICAgICAgICAgICAgIGFycml2YWxzLkZVTiA9IGFycml2YWxzLmljbSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3ByZXYuRlVOID0gZ2V0X3ByZXYuc2VpcWhyZi5pY20sCiAgICAgICAgICAgICAgICAgICAgICMgaW5pdC5pY20gcGFyYW1zCiAgICAgICAgICAgICAgICAgICAgIHMubnVtID0gOTk5NywKICAgICAgICAgICAgICAgICAgICAgZS5udW0gPSAwLAogICAgICAgICAgICAgICAgICAgICBpLm51bSA9IDMsCiAgICAgICAgICAgICAgICAgICAgIHEubnVtID0gMCwKICAgICAgICAgICAgICAgICAgICAgaC5udW0gPSAwLAogICAgICAgICAgICAgICAgICAgICByLm51bSA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGYubnVtID0gMCwKICAgICAgICAgICAgICAgICAgICAgIyBwYXJhbS5pY20gcGFyYW1zCiAgICAgICAgICAgICAgICAgICAgIGluZi5wcm9iLmUgPSAwLjAyLAogICAgICAgICAgICAgICAgICAgICBhY3QucmF0ZS5lID0gMTAsCiAgICAgICAgICAgICAgICAgICAgIGluZi5wcm9iLmkgPSAwLjA1LAogICAgICAgICAgICAgICAgICAgICBhY3QucmF0ZS5pID0gMTAsCiAgICAgICAgICAgICAgICAgICAgIGluZi5wcm9iLnEgPSAwLjAyLAogICAgICAgICAgICAgICAgICAgICBhY3QucmF0ZS5xID0gMi41LAogICAgICAgICAgICAgICAgICAgICBxdWFyLnJhdGUgPSAxIC8gMzAsCiAgICAgICAgICAgICAgICAgICAgIGhvc3AucmF0ZSA9IDEgLyAxMDAsCiAgICAgICAgICAgICAgICAgICAgIGRpc2NoLnJhdGUgPSAxIC8gMTUsCiAgICAgICAgICAgICAgICAgICAgIHByb2cucmF0ZSA9IDEgLyAxMCwKICAgICAgICAgICAgICAgICAgICAgcHJvZy5kaXN0LnNjYWxlID0gNSwKICAgICAgICAgICAgICAgICAgICAgcHJvZy5kaXN0LnNoYXBlID0gMS41LAogICAgICAgICAgICAgICAgICAgICByZWMucmF0ZSA9IDEgLyAyMCwKICAgICAgICAgICAgICAgICAgICAgcmVjLmRpc3Quc2NhbGUgPSAzNSwKICAgICAgICAgICAgICAgICAgICAgcmVjLmRpc3Quc2hhcGUgPSAxLjUsCiAgICAgICAgICAgICAgICAgICAgIGZhdC5yYXRlLmJhc2UgPSAxIC8gNTAsCiAgICAgICAgICAgICAgICAgICAgIGhvc3AuY2FwID0gNDAsCiAgICAgICAgICAgICAgICAgICAgIGZhdC5yYXRlLm92ZXJjYXAgPSAxIC8gMjUsCiAgICAgICAgICAgICAgICAgICAgIGZhdC50Y29lZmYgPSAwLjUsCiAgICAgICAgICAgICAgICAgICAgIHZpdGFsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgYS5yYXRlID0gKDEwLjUgLyAzNjUpIC8gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgYS5wcm9wLmUgPSAwLjAxLAogICAgICAgICAgICAgICAgICAgICBhLnByb3AuaSA9IDAuMDAxLAogICAgICAgICAgICAgICAgICAgICBhLnByb3AucSA9IDAuMDEsCiAgICAgICAgICAgICAgICAgICAgIGRzLnJhdGUgPSAoNyAvIDM2NSkgLyAxMDAwLAogICAgICAgICAgICAgICAgICAgICBkZS5yYXRlID0gKDcgLyAzNjUpIC8gMTAwMCwKICAgICAgICAgICAgICAgICAgICAgZGkucmF0ZSA9ICg3IC8gMzY1KSAvIDEwMDAsCiAgICAgICAgICAgICAgICAgICAgIGRxLnJhdGUgPSAoNyAvIDM2NSkgLyAxMDAwLAogICAgICAgICAgICAgICAgICAgICBkaC5yYXRlID0gKDIwIC8gMzY1KSAvIDEwMDAsCiAgICAgICAgICAgICAgICAgICAgIGRyLnJhdGUgPSAoNyAvIDM2NSkgLyAxMDAwLAogICAgICAgICAgICAgICAgICAgICBvdXQgPSAibWVhbiIpIHsKICBjb250cm9sIDwtIGNvbnRyb2wuaWNtKAogICAgdHlwZSA9IHR5cGUsCiAgICBuc3RlcHMgPSBuc3RlcHMsCiAgICBuc2ltcyA9IG5zaW1zLAogICAgbmNvcmVzID0gbmNvcmVzLAogICAgcHJvZy5yYW5kID0gcHJvZy5yYW5kLAogICAgcmVjLnJhbmQgPSByZWMucmFuZCwKICAgIGluZmVjdGlvbi5GVU4gPSBpbmZlY3Rpb24uRlVOLAogICAgcmVjb3ZlcnkuRlVOID0gcmVjb3ZlcnkuRlVOLAogICAgYXJyaXZhbHMuRlVOID0gYXJyaXZhbHMuRlVOLAogICAgZGVwYXJ0dXJlcy5GVU4gPSBkZXBhcnR1cmVzLkZVTiwKICAgIGdldF9wcmV2LkZVTiA9IGdldF9wcmV2LkZVTiwKICAgIHZlcmJvc2UgPSBUUlVFLAogICAgdmVyYm9zZS5pbnQgPSAxCiAgKQoKICBpbml0IDwtIGluaXQuaWNtKAogICAgcy5udW0gPSBzLm51bSwKICAgIGUubnVtID0gZS5udW0sCiAgICBpLm51bSA9IGkubnVtLAogICAgcS5udW0gPSBxLm51bSwKICAgIGgubnVtID0gaC5udW0sCiAgICByLm51bSA9IHIubnVtLAogICAgZi5udW0gPSBmLm51bQogICkKCiAgcGFyYW0gPC0gcGFyYW0uaWNtKAogICAgaW5mLnByb2IuZSA9IGluZi5wcm9iLmUsCiAgICBhY3QucmF0ZS5lID0gYWN0LnJhdGUuZSwKICAgIGluZi5wcm9iLmkgPSBpbmYucHJvYi5pLAogICAgYWN0LnJhdGUuaSA9IGFjdC5yYXRlLmksCiAgICBpbmYucHJvYi5xID0gaW5mLnByb2IucSwKICAgIGFjdC5yYXRlLnEgPSBhY3QucmF0ZS5xLAogICAgYWdlcyA9IGFnZXMsCiAgICBxdWFyLnJhdGUgPSBxdWFyLnJhdGUsCiAgICBob3NwLnJhdGUgPSBob3NwLnJhdGUsCiAgICBkaXNjaC5yYXRlID0gZGlzY2gucmF0ZSwKICAgIHByb2cucmF0ZSA9IHByb2cucmF0ZSwKICAgIHByb2cuZGlzdC5zY2FsZSA9IHByb2cuZGlzdC5zY2FsZSwKICAgIHByb2cuZGlzdC5zaGFwZSA9IHByb2cuZGlzdC5zaGFwZSwKICAgIHJlYy5yYXRlID0gcmVjLnJhdGUsCiAgICByZWMuZGlzdC5zY2FsZSA9IHJlYy5kaXN0LnNjYWxlLAogICAgcmVjLmRpc3Quc2hhcGUgPSByZWMuZGlzdC5zaGFwZSwKICAgIGZhdC5yYXRlLmJhc2UgPSBmYXQucmF0ZS5iYXNlLAogICAgaG9zcC5jYXAgPSBob3NwLmNhcCwKICAgIGZhdC5yYXRlLm92ZXJjYXAgPSBmYXQucmF0ZS5vdmVyY2FwLAogICAgZmF0LnRjb2VmZiA9IGZhdC50Y29lZmYsCiAgICB2aXRhbCA9IHZpdGFsLAogICAgYS5yYXRlID0gYS5yYXRlLAogICAgYS5wcm9wLmUgPSBhLnByb3AuZSwKICAgIGEucHJvcC5pID0gYS5wcm9wLmksCiAgICBhLnByb3AucSA9IGEucHJvcC5xLAogICAgZHMucmF0ZSA9IGRzLnJhdGUsCiAgICBkZS5yYXRlID0gZGUucmF0ZSwKICAgIGRpLnJhdGUgPSBkaS5yYXRlLAogICAgZHEucmF0ZSA9IGRxLnJhdGUsCiAgICBkaC5yYXRlID0gZGgucmF0ZSwKICAgIGRyLnJhdGUgPSBkci5yYXRlCiAgKQoKICBzaW0gPC0gaWNtLnNlaXFocmYocGFyYW0sIGluaXQsIGNvbnRyb2wpCiAgc2ltX2RmIDwtIGFzLmRhdGEuZnJhbWUoc2ltLCBvdXQgPSBvdXQpCgogIHJldHVybihsaXN0KHNpbSA9IHNpbSwgZGYgPSBzaW1fZGYpKQp9CmBgYAoKYGBge3Igc2ltdWxhdGUsIGluY2x1ZGU9RkFMU0V9CgojIFBPUkRBVEEKcHRfcG9wdWxhdGlvbiA8LSAxMDI2MDg5MyAjIDIwMjAgZXN0CnB0X3BvcHVsYXRpb25fbm9ydGUgPC0gMzU3NDM5NCAjIGVzdCAyMDE5ICoqKioqKiAzNjkwNjgxCnB0X2JpcnRocyA8LSA4NjU1NyAjIDIwMTkKcHRfZGVhdGhzIDwtIDExMjQxMSAjIDIwMTkgKHRyYW5zcGFyZW5jaWEuc25zLmdvdi5wdCkKcHRfZGVhdGhzX25vcnRlIDwtIDM1MjM5ICMgMjAxOCAoaW5lLnB0KQpwdF9ob3NwZGVhdGhzIDwtIDM2NzY2ICMgMjAxOSAodHJhbnNwYXJlbmNpYS5zbnMuZ292LnB0KQpwdF9ob3NwZGVhdGhzX25vcnRlIDwtIDEzMzMxCnB0X2FkbWlzc2lvbnMgPC0gNjYwODM4ICMgMjAxOSAodHJhbnNwYXJlbmNpYS5zbnMuZ292LnB0KQpwdF9hZG1pc3Npb25zX25vcnRlIDwtIDI2Mzk1NQpwdF9iaXJ0aHJhdGUgPC0gcHRfYmlydGhzIC8gcHRfcG9wdWxhdGlvbiAqIDEwMDAgIyA4LjQzNTYyMQpwdF9iaXJ0aHJhdGVfbm9ydGUgPC0gNy43ICMgKioqKioqCnB0X2VtaWdycmF0ZSA8LSA3LjkgIyAyMDE4IGVzdApwdF9kZWF0aHJyYXRlIDwtIHB0X2RlYXRocyAvIHB0X3BvcHVsYXRpb24gKiAxMDAwICMgMTEuMDE3NjYKcHRfZGVhdGhycmF0ZV9ub3J0ZSA8LSBwdF9kZWF0aHNfbm9ydGUgLyBwdF9wb3B1bGF0aW9uX25vcnRlICogMTAwMCAjIDkuODU4NzM0CnB0X2hkZWF0aHJyYXRlIDwtIHB0X2hvc3BkZWF0aHMgLyBwdF9hZG1pc3Npb25zICogMTAwMCAjIDU1LjYzNTQyCnB0X2hkZWF0aHJyYXRlX25vcnRlIDwtIHB0X2hvc3BkZWF0aHNfbm9ydGUgLyBwdF9hZG1pc3Npb25zX25vcnRlICogMTAwMCAjIDUwLjUwNDgyCnB0X2hvc3BjYXAgPC0gNDkyMDAwCgpwb3B1bGF0aW9uIDwtIHB0X3BvcHVsYXRpb25fbm9ydGUKc3RhcnRfaW5mIDwtIDQKaG9zcGNhcCA8LSBwdF9ob3NwY2FwCmJpcnRocmF0ZSA8LSBwdF9iaXJ0aHJhdGVfbm9ydGUKZGVhdGhyYXRlIDwtIHB0X2RlYXRocnJhdGVfbm9ydGUKaGRlYXRocnJhdGUgPC0gcHRfaGRlYXRocnJhdGVfbm9ydGUKc3RlcHMgPC0gMTgwCgpyYXRlLmUgPC0gcmVwKGV2ZW50cyRyYXRlLmVbMV0sIGV2ZW50cyRpZHhbMV0pCnJhdGUuaSA8LSByZXAoZXZlbnRzJHJhdGUuaVsxXSwgZXZlbnRzJGlkeFsxXSkKaWR4X2RpZmYgPC0gYyhkaWZmKGV2ZW50cyRpZHgpLCAoc3RlcHMgLSB0YWlsKGV2ZW50cyRpZHgsIDEpKSkKZm9yIChpIGluIHNlcV9sZW4obnJvdyhldmVudHMpKSkgewogIGlmIChldmVudHMkaWR4W2ldIDwgc3RlcHMpIHsKICAgIHJhdGUuZSA8LSBjKHJhdGUuZSwgcmVwKGV2ZW50cyRyYXRlLmVbaV0sIGlkeF9kaWZmW2ldKSkKICAgIHJhdGUuaSA8LSBjKHJhdGUuaSwgcmVwKGV2ZW50cyRyYXRlLmlbaV0sIGlkeF9kaWZmW2ldKSkKICB9Cn0KCnBhcmFtcyA8LSBsaXN0KAogIHR5cGUgPSAiU0VJUUhSRiIsCiAgbnN0ZXBzID0gc3RlcHMsCiAgbnNpbXMgPSAzMiwKICBuY29yZXMgPSA0LAoKICBhZ2VzID0gYWdlcywKCiAgIyBpbml0LmljbSBwYXJhbXMKICBzLm51bSA9IHBvcHVsYXRpb24sCiAgZS5udW0gPSAwLAogIGkubnVtID0gc3RhcnRfaW5mLAogIHEubnVtID0gMCwKICBoLm51bSA9IDAsCiAgci5udW0gPSAwLAogIGYubnVtID0gMCwKICAjIHBhcmFtLmljbSBwYXJhbXMKICAjCiAgYWN0LnJhdGUuZSA9IHJhdGUuZSwgIyBudW1iZXIgb2YgZXhwb3N1cmUgZXZlbnRzIGJldHdlZW4gRSBhbmQgUy4gT3RoZXJ3aXNlIGFzIGZvciBhY3QucmF0ZS5pLgogIGFjdC5yYXRlLmkgPSByYXRlLmksICMgbnVtYmVyIG9mIGV4cG9zdXJlIGV2ZW50cyBiZXR3ZWVuIEkgYW5kIFMuIEl0J3Mgc3RvY2hhc3RpYywgc28gdGhlIHJhdGUgaXMgYW4gYXZlcmFnZSwgc29tZSBpbmRpdmlkdWFscyBtYXkgaGF2ZSBtb3JlIG9yIGxlc3MuIFJlZHVjaW5nIHRoaXMgcGFyYW1ldGVyIGlzIGVxdWl2YWxlbnQgdG8gaW5jcmVhc2luZyBzb2NpYWwgZGlzdGFuY2luZyBieSBwZW9wbGUgaW4gdGhlIEkgY29tcGFydG1lbnQuCiAgYWN0LnJhdGUucSA9IHJhdGUuaSAvIDIsICMgbnVtYmVyIG9mIGV4cG9zdXJlIGV2ZW50cyBiZXR3ZWVuIFEgYW5kIFMuIE90aGVyd2lzZSBhcyBmb3IgYWN0LnJhdGUuaS4KICBpbmYucHJvYi5lID0gMC4wMiwgIyBQcm9iYWJpbGl0eSBvZiBwYXNzaW5nIG9uIGluZmVjdGlvbiBmcm9tIEUgdG8gUyBhdCBlYWNoIGV4cG9zdXJlIGV2ZW50LiBOb3RlIHRoZSBkZWZhdWx0IGlzIGxvd2VyIHRoYW4gZm9yIGluZi5wcm9iLmkgcmVmbGVjdGluZyB0aGUgcmVkdWNlZCBpbmZlY3Rpdml0eSBvZiBpbmZlY3RlZCBidXQgYXN5bXB0b21hdGljIHBlb3BsZS4gT3RoZXJ3aXNlIGFzIGZvciBpbmYucHJvYi5pCiAgaW5mLnByb2IuaSA9IDAuMDUsICMgUHJvYmFiaWxpdHkgb2YgcGFzc2luZyBvbiBpbmZlY3Rpb24gZnJvbSBJIHRvIFMgYXQgZWFjaCBleHBvc3VyZSBldmVudC4gUmVkdWNpbmcgaW5mLnByb2IuaSBpcyBlcXVpdmFsZW50IHRvIGluY3JlYXNpbmcgaHlnaWVuZSBtZWFzdXJlcy4KICBpbmYucHJvYi5xID0gMC4wMiwgIyBQcm9iYWJpbGl0eSBvZiBwYXNzaW5nIG9uIGluZmVjdGlvbiBmcm9tIFEgdG8gUy4gTm90ZSB0aGUgZGVmYXVsdCBpcyBsb3dlciB0aGFuIGZvciBpbmYucHJvYi5pIHJlZmxlY3RpbmcgdGhlIGdyZWF0ZXIgY2FyZSB0aGF0IHNlbGYtaXNvbGF0ZWQgaW5kaXZpZHVhbHMgd2lsbCwgb24gYXZlcmFnZSwgdGFrZSByZWdhcmRpbmcgaHlnaWVuZSBtZWFzdXJlcywgc3VjaCBhcyB3ZWFyaW5nIG1hc2tzLCB0byBsaW1pdCBzcHJlYWQgdG8gb3RoZXJzLiBPdGhlcndpc2UgYXMgZm9yIGluZi5wcm9iLmkKICAjIyMjIyMjIyMjIyMjCiAgIyMjIyMjIyMjIyMjIwogICMgd2VpYnVsbCBpcyBwcmVmZXJyZWQgaW4gdGhpcyBjYXNlLiBXZWlidWxsIG1vZGVscyBhICJ0aW1lLXRvLWZhaWx1cmUiIGZvciB3aGljaAogICMgIHRoZSBmYWlsdXJlIHJhdGUgaXMgcHJvcG9ydGlvbmFsIHRvIGEgcG93ZXIgb2YgdGltZS4gQSB2YWx1ZSBvZiBrID4gMQogICMgIGluZGljYXRlcyB0aGF0IHRoZSBmYWlsdXJlIHJhdGUgaW5jcmVhc2VzIHdpdGggdGltZS4KICAjICBNZWRpYW4gPSA1IGRheXM7IElRSToKICBwcm9nLnJhbmQgPSBGQUxTRSwgIyBGcm9tIEV4cG9zZWQgdG8gSW5mZWN0ZWQsIEZBTFNFIGlzIFdlaWJ1bGwsIFRSVUUgaXMgYmlub21pYWwKICBwcm9nLnJhdGUgPSAxIC8gMTAsICMgQmlub21pYWwgZGlzdHJpYnV0aW9uLCBvbmx5IGlmIHByb2cucmFuZCBpcyBUUlVFCiAgIyMjIyMgYiAtPiBFeHBvc2VkIHRvIEluZmVjdGVkCiAgcHJvZy5kaXN0LnNjYWxlID0gNSwgIyBXZWlidWxsIGRpc3RyaWJ1dGlvbiwgb25seSBpZiBwcm9nLnJhbmQgaXMgRkFMU0UKICBwcm9nLmRpc3Quc2hhcGUgPSAxLjUsICMgV2VpYnVsbCBkaXN0cmlidXRpb24sIG9ubHkgaWYgcHJvZy5yYW5kIGlzIEZBTFNFCiAgIyMjIyMjIyMjIyMjIwogICMjIyMjIyMjIyMjIyMKICByZWMucmFuZCA9IEZBTFNFLCAjIEZBTFNFIGlzIFdlaWJ1bGwsIFRSVUUgaXMgYmlub21pYWwKICByZWMucmF0ZSA9IDEgLyAyMCwgIyBCaW5vbWlhbAogICMjIyMjIyMgZCwgZywgaCAtPiBJbmZlY3RlZCwgUXVhcmFudGluZSwgSG9zcGl0YWwgdG8gUmVjb3ZlcmVkCiAgcmVjLmRpc3Quc2NhbGUgPSAzNSwgIyBXZWlidWxsCiAgcmVjLmRpc3Quc2hhcGUgPSAxLjUsICMgV2VpYnVsbAogICMjIyMjIyMjIyMjIwogICMjIyMjIyMjIyMjIyBmIC0+IEggdG8gRgogIGZhdC5yYW5kID0gVFJVRSwgIyBUUlVFIGlzIGJpbm9taWFsOyBpZiBGQUxTRSwgcmFuZG9tIHNhbXBsZSB3aXRoIGEgc2FtcGxlCiAgIyBmcmFjdGlvbiBhbHNvIGdpdmVuIGJ5IGZhdC5yYXRlLmJhc2UuIEhvd2V2ZXIsIGlmIHRoZSBjdXJyZW50IG51bWJlciBvZiBwYXRpZW50cwogICMgaW4gdGhlIEggKG5lZWRzIGhvc3BpdGFsaXphdGlvbikgY29tcGFydG1lbnQgaXMgYWJvdmUgYSBob3NwaXRhbCBjYXBhY2l0eSBsZXZlbAogICMgc3BlY2lmaWVkIGJ5IGhvc3AuY2FwLCB0aGVuIHRoZSBmYXRhbGl0eSByYXRlIGlzIHRoZSBtZWFuIG9mIHRoZSBiYXNlIGZhdGFsaXR5CiAgIyByYXRlIHdlaWdodGVkIGJ5IHRoZSBob3NwaXRhbCBjYXBhY2l0eSwgcGx1cyBhIGhpZ2hlciByYXRlLCBzcGVjaWZpZWQgYnkKICAjIGZhdC5yYXRlLm92ZXJjYXAsIHdlaWdodGVkIGJ5IHRoZSBiYWxhbmNlIG9mIHRob3NlIHJlcXVpcmluZyBob3NwaXRhbGl6YXRpb24KICAjIChidXQgd2hvIGNhbid0IGJlIGFjY29tbW9kYXRlZCkuIEJ5IHNldHRpbmcgZmF0LnJhdGUub3ZlcmNhcCBoaWdoZXIsCiAgIyB0aGUgZWZmZWN0IG9mIGV4Y2VlZGluZyB0aGUgY2FwYWNpdHkgb2YgdGhlIGhlYWx0aCBjYXJlIHN5c3RlbSBjYW4gYmUgc2ltdWxhdGVkLgogICMgVGhlcmUgaXMgYWxzbyBhIGNvZWZmaWNpZW50IGZhdC50Y29lZmYgZm9yIHRoZSBmYXRhbGl0eSByYXRlcyB0aGF0IGluY3JlYXNlcwogICMgdGhlbSBhcyBhIGxpbmVhciBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGRheXMgdGhlIGluZGl2aWR1YWwgaGFzIGJlZW4gaW4gdGhlCiAgIyBIIGNvbXBhcnRtZW50LiBVc2Ugb2YgdGhlIGNvLWVmZmljaWVudCBiZXR0ZXIgYXBwcm94aW1hdGVzIHRoZSB0cmFwZXpvaWQgc3Vydml2YWwKICAjIHRpbWUgZGlzdHJpYnV0aW9uIHR5cGljYWwgb2YgSUNVIHBhdGllbnRzLgogIGZhdC5yYXRlLmJhc2UgPSAxLjMgLyAxMDAsICMgMiUgaW4gMTUgZGF5cwogIGZhdC5yYXRlLm92ZXJjYXAgPSAxIC8gMjUsICMgTW9ydGFsaXR5IHJhdGUgb2YgdGhvc2UgbmVlZGluZyBob3NwaXRhbCBidXQgbm8gY2FwYWNpdHkKICBmYXQudGNvZWZmID0gMC41LCAjIFRpbWUgY28tZWZmaWNpZW50IGZvciBpbmNyZWFzaW5nIG1vcnRhbGl0eSByYXRlIGFzIHRpbWUgaW4gdGhlIEggY29tcGFydG1lbnQgaW5jcmVhc2VzIGZvciBlYWNoIGluZGl2aWR1YWwgaW4gaXQuCiAgaG9zcC5jYXAgPSBob3NwY2FwLCAjIDI0MCBVQ0kKICAjIyMjIyMjIyMjIyMjIyMjIwogICMjIyMjIyMjIyMjIyMjIyMjCiAgcXVhci5yYW5kID0gRkFMU0UsICMgaWYgVFJVRSwgYmlub21pYWwsIGlmIEZBTFNFLCByYW5kb20gc2FtcGxlLgogIHF1YXIucmF0ZSA9IDEgLyAzMCwKICAjIyMjIyMjIyMjIyMjIyMjIwogICMjIyMjIyMjIyMjIyMjIyMjCiAgaG9zcC5yYW5kID0gRkFMU0UsICMgaWYgVFJVRSwgYmlub21pYWwsIGlmIEZBTFNFLCByYW5kb20gc2FtcGxlLgogIGhvc3AucmF0ZSA9IDEgLyAxMDAsICMgaSwgZSAtPiBJLFEgdG8gSAogICMjIyMjIyMjIyMjIyMjIyMjCiAgIyMjIyMjIyMjIyMjIyMjIyMKICBkaXNjaC5yYW5kID0gVFJVRSwgIyBJZiBUUlVFLCBiaW5vbWlhbCwgaWYgRkFMU0UsIHJhbmRvbSBzYW1wbGUuCiAgZGlzY2gucmF0ZSA9IDEgLyAxNSwgIyBnIC0+IEggdG8gUgogICMjIyMjIyMjIyMjIyMjIyMjCiAgIyMjIyMjIyMjIyMjIyMjIyMKICAjIEJhY2tncm91bmQgZGVtb2dyYXBoaWMgZGVwYXJ0dXJlIChkZWF0aCBub3QgZHVlIHRvIHZpcnVzKSByYXRlcy4KICAjIERlZmF1bHRzIGJhc2VkIG9uIEF1c3RyYWxpYW4gY3J1ZGUgZGVhdGggcmF0ZXMuCiAgIyBDYW4gYmUgdXNlZCB0byBtb2RlbCBlbWlncmF0aW9uIGFzIHdlbGwgYXMgZGVhdGhzLgogIHZpdGFsID0gVFJVRSwgIyBFbmFibGVzIGRlbW9ncmFwaGljcywgdGhhdCBpcywgYXJyaXZhbHMgYW5kIGRlcGFydHVyZXMsIHRvIGFuZCBmcm9tIHRoZSBzaW11bGF0ZWQgcG9wdWxhdGlvbi4KICAjICgxMC41IC8gMzY1KSAvIDEwMDAsICMgQXJyaXZhbCByYXRlLiBEZWZhdWx0IGlzIGFwcHJveCB0aGUgZGFpbHkgYmlydGggcmF0ZSBvZiBBdXN0cmFsaWEKICBhLnJhdGUgPSAoYmlydGhyYXRlIC8gMzY1KSAvIDEwMDAsCiAgYS5wcm9wLmUgPSAwLjAxLAogIGEucHJvcC5pID0gMC4wMDEsCiAgYS5wcm9wLnEgPSAwLjAxLAogIGRzLnJhdGUgPSAoZGVhdGhyYXRlIC8gMzY1KSAvIDEwMDAsICMgRGVwYXJ0dXJlIHJhdGUgKGRlYXRoIG5vdCBieSB2aXJ1cykKICBkZS5yYXRlID0gKGRlYXRocmF0ZSAvIDM2NSkgLyAxMDAwLAogIGRpLnJhdGUgPSAoZGVhdGhyYXRlIC8gMzY1KSAvIDEwMDAsCiAgZHEucmF0ZSA9IChkZWF0aHJhdGUgLyAzNjUpIC8gMTAwMCwKICBkaC5yYXRlID0gKGhkZWF0aHJyYXRlIC8gMzY1KSAvIDEwMDAsCiAgZHIucmF0ZSA9IChkZWF0aHJhdGUgLyAzNjUpIC8gMTAwMCwKICAjIyMjIyMjIyMjIyMjIyMjIwogICMgU3VtbWFyeSBmdW5jdGlvbiBmb3IgdGhlIHNpbXVsYXRpb24gcnVucy4gbWVkaWFuIGlzIGFsc28gYXZhaWxhYmxlLCBvciBwZXJjZW50aWxlcywgc2VlIHRoZSBFcGlNb2RlbCBkb2N1bWVudGF0aW9uLgogIG91dCA9ICJtZWFuIgopCgojIHNldC5zZWVkKDEpICMjIHNlZWQgd2FzIG1vdmVkIHRvIHRoZSBleHRlbnNpb24gY29kZSwgYmVjYXVzZSBtdWx0aXRocmVhZCBicmVha3MgaXQuCiMgYmFzZWxpbmVfc2ltIDwtIGRvLmNhbGwoInNpbXVsYXRlIiwgcGFyYW1zKQpzb3VyY2UoIi4uL1IvcGxvdF9zaXIuUiIsIGVuY29kaW5nID0gIlVURi04IikKYGBgCgojIyBEaXN0cmlidXRpb24gb2YgZHVyYXRpb24gaW4ga2V5IGNvbXBhcnRtZW50cwoKYGBge3IgZ2V0IHRpbWVzLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMCwgd2FybmluZz1GQUxTRX0KIyBkZWZpbmUgYSBmdW5jdGlvbiB0byBleHRyYWN0IHRpbWluZ3MgYW5kIGFzc2VtYmxlIGEgZGF0YSBmcmFtZQpnZXRfdGltZXMgPC0gZnVuY3Rpb24oc2ltdWxhdGVfcmVzdWx0cykgewogIHNpbSA8LSBzaW11bGF0ZV9yZXN1bHRzJHNpbQoKICBmb3IgKHMgaW4gMTpzaW0kY29udHJvbCRuc2ltcykgewogICAgaWYgKHMgPT0gMSkgewogICAgICB0aW1lcyA8LSBzaW0kdGltZXNbW3Bhc3RlKCJzaW0iLCBzLCBzZXAgPSAiIildXQogICAgICB0aW1lcyA8LSB0aW1lcyAlPiUgbXV0YXRlKHMgPSBzKQogICAgfSBlbHNlIHsKICAgICAgdGltZXMgPC0gdGltZXMgJT4lCiAgICAgICAgYmluZF9yb3dzKHNpbSR0aW1lc1tbcGFzdGUoInNpbSIsIHMsIHNlcCA9ICIiKV1dICU+JQogICAgICAgICAgbXV0YXRlKHMgPSBzKSkKICAgIH0KICAgIGdjKCkKICB9CgogIHRpbWVzIDwtIHRpbWVzICU+JQogICAgbXV0YXRlKAogICAgICBpbmZUaW1lID0gaWZlbHNlKGluZlRpbWUgPCAwLCAtNSwgaW5mVGltZSksCiAgICAgIGV4cFRpbWUgPSBpZmVsc2UoZXhwVGltZSA8IDAsIC01LCBleHBUaW1lKQogICAgKQogIGdjKCkKICB0aW1lcyA8LSB0aW1lcyAlPiUgbXV0YXRlKAogICAgaW5jdWJhdGlvbl9wZXJpb2QgPSBpbmZUaW1lIC0gZXhwVGltZSwKICAgIGlsbG5lc3NfZHVyYXRpb24gPSByZWNvdlRpbWUgLSBleHBUaW1lLAogICAgaWxsbmVzc19kdXJhdGlvbl9ob3NwID0gZGlzY2hUaW1lIC0gZXhwVGltZSwKICAgIGhvc3BfbG9zID0gZGlzY2hUaW1lIC0gaG9zcFRpbWUsCiAgICBxdWFyYW50aW5lX2RlbGF5ID0gcXVhclRpbWUgLSBpbmZUaW1lLAogICAgc3Vydml2YWxfdGltZSA9IGZhdFRpbWUgLSBpbmZUaW1lCiAgKQogIGdjKCkKICB0aW1lcyA8LSB0aW1lcyAlPiUgc2VsZWN0KAogICAgcywKICAgIGluY3ViYXRpb25fcGVyaW9kLAogICAgcXVhcmFudGluZV9kZWxheSwKICAgIGlsbG5lc3NfZHVyYXRpb24sCiAgICBpbGxuZXNzX2R1cmF0aW9uX2hvc3AsCiAgICBob3NwX2xvcywKICAgIHN1cnZpdmFsX3RpbWUKICApCiAgZ2MoKQoKICAjIyBtb3N0IG1lbW9yeSBpbnRlbnNpdmUgcGFydAogIHRpbWVzIDwtIHBpdm90X2xvbmdlcih0aW1lcywgLXMsCiAgICBuYW1lc190byA9ICJwZXJpb2RfdHlwZSIsCiAgICB2YWx1ZXNfdG8gPSAiZHVyYXRpb24iCiAgKQogIGdjKCkKCiAgcmV0dXJuKHRpbWVzKQp9CgojIHRpbWVzIDwtIGdldF90aW1lcyhiYXNlbGluZV9zaW0pCgpwbG90X3RpbWVzIDwtIHRpbWVzICU+JQogIGZpbHRlcihkdXJhdGlvbiA8PSAzMCkgJT4lCiAgbXV0YXRlKHBlcmlvZF90eXBlID0gZmFjdG9yKHBlcmlvZF90eXBlLAogICAgbGV2ZWxzID0gYygKICAgICAgImluY3ViYXRpb25fcGVyaW9kIiwKICAgICAgImlsbG5lc3NfZHVyYXRpb24iLAogICAgICAiaG9zcF9sb3MiLAogICAgICAiaWxsbmVzc19kdXJhdGlvbl9ob3NwIiwKICAgICAgInF1YXJhbnRpbmVfZGVsYXkiLAogICAgICAic3Vydml2YWxfdGltZSIKICAgICksCiAgICBsYWJlbHMgPSBjKAogICAgICAiSW5jdWJhdGlvbiIsCiAgICAgICJJbGxuZXNzIiwKICAgICAgIkhvc3BpdGFsIGNhcmUgcmVxdWlyZWQiLAogICAgICAiSWxsbmVzcyAoaG9zcCkiLAogICAgICAiRGVsYXkgZW50ZXJpbmcgaXNvbGF0aW9uIiwKICAgICAgIlN1cnZpdmFsIHRpbWUgKGZhdGFsaXRpZXMpIgogICAgKQogICkpICU+JQogIGFycmFuZ2UocGVyaW9kX3R5cGUpICU+JQogIGFkZF9jb3VudChwZXJpb2RfdHlwZSwgZHVyYXRpb24pICU+JQogIGRpc3RpbmN0KHBlcmlvZF90eXBlLCBkdXJhdGlvbiwgbikgJT4lCiAgZ3JvdXBfYnkocGVyaW9kX3R5cGUsIC5kcm9wID0gRkFMU0UpICU+JQogIG11dGF0ZShuID0gbiAvIHN1bShuKSkgJT4lCiAgdW5ncm91cCgpCgpmaWcgPC0gcGxvdF9seShwbG90X3RpbWVzLAogIHggPSB+ZHVyYXRpb24sIHkgPSB+biwgY29sb3JzID0gIkRhcmsyIiwKICBjb2xvciA9IH5wZXJpb2RfdHlwZSwKICB5YXhpcyA9IH4gcGFzdGUwKCJ5IiwgYXMubnVtZXJpYyhwZXJpb2RfdHlwZSkpLCB0eXBlID0gImJhciIKKQpmaWcgPC0gZmlnICU+JSBsYXlvdXQoCiAgdGl0bGUgPSAiRHVyYXRpb24gZnJlcXVlbmN5IGRpc3RyaWJ1dGlvbnMgaW4gUG9ydHVnYWwgLSBOb3J0aCIsCiAgcGFwZXJfYmdjb2xvciA9ICJyZ2IoMjU1LDI1NSwyNTUpIiwgcGxvdF9iZ2NvbG9yID0gInJnYigyMjksMjI5LDIyOSkiLAogIHhheGlzID0gbGlzdCgKICAgIHRpdGxlID0gIkRheXMiLAogICAgZ3JpZGNvbG9yID0gInJnYigyNTUsMjU1LDI1NSkiLAogICAgc2hvd2dyaWQgPSBUUlVFLAogICAgc2hvd2xpbmUgPSBGQUxTRSwKICAgIHNob3d0aWNrbGFiZWxzID0gVFJVRSwKICAgIHRpY2tjb2xvciA9ICJyZ2IoMTI3LDEyNywxMjcpIiwKICAgIHRpY2tzID0gIm91dHNpZGUiLAogICAgemVyb2xpbmUgPSBGQUxTRQogICksCiAgeWF4aXMgPSBsaXN0KAogICAgdGl0bGUgPSAiRGVuc2l0eSIsCiAgICBncmlkY29sb3IgPSAicmdiKDI1NSwyNTUsMjU1KSIsCiAgICBzaG93Z3JpZCA9IFRSVUUsCiAgICBzaG93bGluZSA9IEZBTFNFLAogICAgc2hvd3RpY2tsYWJlbHMgPSBUUlVFLAogICAgdGlja2NvbG9yID0gInJnYigxMjcsMTI3LDEyNykiLAogICAgdGlja3MgPSAib3V0c2lkZSIsCiAgICByYW5nZSA9IGMoMCwgbWF4KHBsb3RfdGltZXMkbikgKiAxLjA1KSwKICAgIHplcm9saW5lID0gRkFMU0UKICApCikKZmlnIDwtIGZpZyAlPiUgc3VicGxvdChucm93cyA9IDMsIHNoYXJlWCA9IFRSVUUsIHNoYXJlWSA9IFRSVUUpCmZpZwpgYGAKCiMjIEJhc2VsaW5lIFByZXZhbGVuY2UKCiMjIyBPdmVyYWxsIC0gSW50ZXJhY3RpdmUgUGxvdAoKYGBge3IgYmFzZWxpbmUgcGxvdCwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9MTAsIHdhcm5pbmc9RkFMU0V9CnBsb3RfbHlfc2lyKGJhc2VsaW5lX3NpbSwgYygiZS5udW0iLCAiaS5udW0iLCAicS5udW0iLCAiaC5udW0iLCAiZi5udW0iLCAici5udW0iKSwgZXZlbnRzID0gZXZlbnRzKQpgYGAKCiMjIyBDb21wYXJpc29uIHdpdGggcmVhbCBkYXRhIC0gSW50ZXJhY3RpdmUgUGxvdAoKYGBge3Igc2ltdWxhdGUyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD0xMCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KcGxvdF9seV9zaXIoYmFzZWxpbmVfc2ltLCBjKCJmLm51bSIsICJoLm51bSIsICJpLm51bSIsICJxLm51bSIsICJlLm51bSIsICJyLm51bSIpLCBzdGFja2VkID0gVFJVRSwgZ3JvdXBlZCA9IFRSVUUsIHJlYWxfZGF0YSA9IGdlb19ub3J0ZSwgZXZlbnRzID0gZXZlbnRzLCBsb2cgPSBUUlVFKQpgYGAKCiMjIyBCYXNpYyByZXByb2R1Y3Rpb24gbnVtYmVyICRSX3swfSQKCmBgYHtyIGJhc2VsaW5lIFIwLCBlY2hvPUZBTFNFLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0xMCwgd2FybmluZz1GQUxTRX0KIyBnZXQgdGhlIFMtPiBFIGNvbXBhcnRtZW50IGZsb3csIHdoaWNoIGlzCiMgb3VyIGRhaWx5IGluY2lkZW5jZSByYXRlCmluY2lkZW5jZV9jb3VudHMgPC0gYmFzZWxpbmVfc2ltJGRmICU+JQogIHNlbGVjdCh0aW1lLCBzZS5mbG93KQojIHVuY291bnQgdGhlbQppbmNpZGVudF9jYXNlX2RhdGVzIDwtIGluY2lkZW5jZV9jb3VudHMgJT4lCiAgdW5jb3VudChzZS5mbG93KSAlPiUKICBwdWxsKHRpbWUpCmluY2lkZW50X2Nhc2VfZGF0ZXMgPC0gYXMuRGF0ZSgiMjAyMC0wMi0yOCIpICsgaW5jaWRlbnRfY2FzZV9kYXRlcwojIGNvbnZlcnQgdG8gYW4gaW5jaWRlbmNlIG9iamVjdAppbmNpZGVuY2VfYWxsIDwtIGFzLmRhdGEuZnJhbWUoaW5jaWRlbmNlKGluY2lkZW50X2Nhc2VfZGF0ZXMpKQoKZmlnIDwtIHBsb3RfbHkoaW5jaWRlbmNlX2FsbCwgeCA9IH5kYXRlcywgeSA9IH5jb3VudHMsIHR5cGUgPSAiYmFyIikKCmZpZyA8LSBmaWcgJT4lIGxheW91dCgKICB0aXRsZSA9ICJEYWlseSBpbmNpZGVuY2UgaW4gUG9ydHVnYWwgLSBOb3J0aCIsCiAgcGFwZXJfYmdjb2xvciA9ICJyZ2IoMjU1LDI1NSwyNTUpIiwgcGxvdF9iZ2NvbG9yID0gInJnYigyMjksMjI5LDIyOSkiLAogIHhheGlzID0gbGlzdCgKICAgIHRpdGxlID0gIkRhdGUiLAogICAgZ3JpZGNvbG9yID0gInJnYigyNTUsMjU1LDI1NSkiLAogICAgc2hvd2dyaWQgPSBUUlVFLAogICAgc2hvd2xpbmUgPSBGQUxTRSwKICAgIHNob3d0aWNrbGFiZWxzID0gVFJVRSwKICAgIHRpY2tjb2xvciA9ICJyZ2IoMTI3LDEyNywxMjcpIiwKICAgIHRpY2tzID0gIm91dHNpZGUiLAogICAgemVyb2xpbmUgPSBGQUxTRQogICksCiAgeWF4aXMgPSBsaXN0KAogICAgdGl0bGUgPSAiQ2FzZXMiLAogICAgZ3JpZGNvbG9yID0gInJnYigyNTUsMjU1LDI1NSkiLAogICAgc2hvd2dyaWQgPSBUUlVFLAogICAgc2hvd2xpbmUgPSBGQUxTRSwKICAgIHNob3d0aWNrbGFiZWxzID0gVFJVRSwKICAgIHRpY2tjb2xvciA9ICJyZ2IoMTI3LDEyNywxMjcpIiwKICAgIHRpY2tzID0gIm91dHNpZGUiLAogICAgemVyb2xpbmUgPSBGQUxTRQogICkKKQpmaWcKYGBgCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9MTAsIHdhcm5pbmc9RkFMU0V9CiMgZmluZCB0aGUgcGVhayBvZiB0aGUgZXBpZGVtaWMgY3VydmUKcGVha19vZl9lcGlkZW1pY19jdXJ2ZSA8LSBmaW5kX3BlYWsoaW5jaWRlbmNlKGluY2lkZW50X2Nhc2VfZGF0ZXMpKQoKaW5jaWRlbmNlX2dyb3d0aF9waGFzZSA8LSBpbmNpZGVuY2UoaW5jaWRlbnRfY2FzZV9kYXRlcywgbGFzdF9kYXRlID0gcGVha19vZl9lcGlkZW1pY19jdXJ2ZSkKIyBzcGVjaWZ5IHNlcmlhbCBpbnRlcnZhbCBtZWFuIGFuZCBTRAojIHNpbmNlIHRoZSBsYXN0IGJsb2cgcG9zdCBuZXcgc3R1ZGllcyBoYXZlIGFwcGVhcmVkCiMgc3VnZ2VzdGluZyA0LjUgaXMgYSBiZXR0ZXIgbWVhbiBmb3IgdGhlIFNJCnNpX21lYW4gPC0gNC41CnNpX3NkIDwtIDMuNAoKIyBnZXQgYSBzZXQgb2YgTUxFIGVzdGltYXRlcyBmb3IgUjAgYW5kIHBsb3QKc21vb3RoX2l0IDwtIGxvd2VzcyhpbmNpZGVuY2VfZ3Jvd3RoX3BoYXNlJGNvdW50cywgZiA9IDAuMykkeQpzbW9vdGhfaXQgPC0gc21vb3RoX2l0IC0gbWluKHNtb290aF9pdCkKcmVzIDwtIGdldF9SKHNtb290aF9pdCwgc2lfbWVhbiA9IHNpX21lYW4sIHNpX3NkID0gc2lfc2QpCgpmaWcgPC0gcGxvdF9seSh4ID0gfiByZXMkUl9ncmlkLCB5ID0gfiByZXMkUl9saWtlKSAlPiUgYWRkX2xpbmVzKCkKCmZpZyA8LSBmaWcgJT4lIGxheW91dCgKICB0aXRsZSA9ICJMaWtlbGlob29kIGRpc3RyaWJ1dGlvbiBvZiBSIiwKICBwYXBlcl9iZ2NvbG9yID0gInJnYigyNTUsMjU1LDI1NSkiLCBwbG90X2JnY29sb3IgPSAicmdiKDIyOSwyMjksMjI5KSIsCiAgeGF4aXMgPSBsaXN0KAogICAgdGl0bGUgPSAiUmVwcm9kdWN0aW9uIE51bWJlciAoUikiLAogICAgZ3JpZGNvbG9yID0gInJnYigyNTUsMjU1LDI1NSkiLAogICAgc2hvd2dyaWQgPSBUUlVFLAogICAgc2hvd2xpbmUgPSBGQUxTRSwKICAgIHNob3d0aWNrbGFiZWxzID0gVFJVRSwKICAgIHRpY2tjb2xvciA9ICJyZ2IoMTI3LDEyNywxMjcpIiwKICAgIHRpY2tzID0gIm91dHNpZGUiLAogICAgemVyb2xpbmUgPSBGQUxTRQogICksCiAgeWF4aXMgPSBsaXN0KAogICAgdGl0bGUgPSAiTGlrZWxpaG9vZCIsCiAgICBncmlkY29sb3IgPSAicmdiKDI1NSwyNTUsMjU1KSIsCiAgICBzaG93Z3JpZCA9IFRSVUUsCiAgICBzaG93bGluZSA9IEZBTFNFLAogICAgc2hvd3RpY2tsYWJlbHMgPSBUUlVFLAogICAgdGlja2NvbG9yID0gInJnYigxMjcsMTI3LDEyNykiLAogICAgdGlja3MgPSAib3V0c2lkZSIsCiAgICB6ZXJvbGluZSA9IEZBTFNFCiAgKQopCmZpZwpzYW1wbGUgPC0gZWFybHlSOjpzYW1wbGVfUihyZXMsIDEwMDAwKQpjYXQocGFzdGUwKCJFc3RpbWF0ZWQgUiBpcyAiLCByb3VuZChtZWFuKHNhbXBsZSksIDIpLCAiICjCsSIsIHJvdW5kKDIgKiBzZChzYW1wbGUpLCAyKSwgIikiKSkKYGBgCgpgYGB7ciBSdCwgZWNobz1GQUxTRSwgZmlnLmhlaWdodD0zLCBmaWcud2lkdGg9MTAsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRX0KIyA1LjYgKCA0LjcgLSA2LjkgKSBodHRwczovL3d3dy5hbm1zcC5wdC9jb3ZpZDE5LW1hcGEKIyAwLjcgKCAwLjcgLSAwLjggKQpzaV9tZWFuIDwtIDUuNgpzaV9tZWFuX3NkIDwtIDAuNQpzaV9zZCA8LSAyLjMKc2lfc2Rfc2QgPC0gMC41Cgplc3QgPC0gZXN0aW1hdGVfUihpbmNpZGVuY2UoaW5jaWRlbnRfY2FzZV9kYXRlcywgbGFzdF9kYXRlID0gdG9kYXkoKSArIDIpLAogIG1ldGhvZCA9ICJ1bmNlcnRhaW5fc2kiLAogIGNvbmZpZyA9IG1ha2VfY29uZmlnKGxpc3QoCiAgICBtZWFuX3NpID0gc2lfbWVhbiwKICAgIHN0ZF9tZWFuX3NpID0gc2lfbWVhbl9zZCwKICAgIG1pbl9tZWFuX3NpID0gc2lfbWVhbiAtIDIgKiBzaV9tZWFuX3NkLCBtYXhfbWVhbl9zaSA9IHNpX21lYW4gKyAyICogc2lfbWVhbl9zZCwKICAgIHN0ZF9zaSA9IHNpX3NkLAogICAgc3RkX3N0ZF9zaSA9IHNpX3NkX3NkLAogICAgbWluX3N0ZF9zaSA9IHNpX3NkIC0gMiAqIHNpX3NkX3NkLCBtYXhfc3RkX3NpID0gc2lfc2QgKyAyICogc2lfc2Rfc2QsCiAgICBuMSA9IDEwMCwgbjIgPSAxMDAsCiAgICBzZWVkID0gMQogICkpCikKCmdncGxvdGx5KHBsb3QoZXN0LCAiUiIpKQpnZ3Bsb3RseShwbG90KGVzdCwgIlNJIikpCgojIFNMID0gYyg1LCA5LCA3LCAzLCA3LCA4LCAxLCAzLCA3LCA5LCAxMikKIyAKIyBzaV9kYXRhX3d1aGFuX0xpIDwtIGRhdGEuZnJhbWUoRUwgPSBhcy5pbnRlZ2VyKHJlcCgwLCAxMSkpLCBFUiA9IGFzLmludGVnZXIocmVwKDEsIAojICAgICAxMSkpLCBTTCA9IGFzLmludGVnZXIoU0wpLCBTUiA9IGFzLmludGVnZXIoU0wgKyAxKSkKIyAKIyAjIyBmaXhpbmcgdGhlIHJhbmRvbSBzZWVkcwojIE1DTUNfc2VlZCA8LSAxCiMgb3ZlcmFsbF9zZWVkIDwtIDIKIyBkaXN0IDwtICJHIiAjIGZpdHRpbmcgYSBHYW1tYSBkaXN0cmlidXRpb24gZm9yIHRoZSBTSQojIGh1YmVpX3Jlc19lbXBpcmljYWxfc2kgPC0gZXN0aW1hdGVfUihpbmNpZGVuY2UoaW5jaWRlbnRfY2FzZV9kYXRlcyksCiMgICBtZXRob2QgPSAic2lfZnJvbV9kYXRhIiwKIyAgIHNpX2RhdGEgPSBzaV9kYXRhX3d1aGFuX0xpLAojICAgY29uZmlnID0gbWFrZV9jb25maWcobGlzdCgKIyAgICAgc2lfcGFyYW1ldHJpY19kaXN0ciA9IGRpc3QsCiMgICAgIG1jbWNfY29udHJvbCA9IG1ha2VfbWNtY19jb250cm9sKHNlZWQgPSBNQ01DX3NlZWQsIGJ1cm5pbiA9IDEwMDApLAojICAgICBzZWVkID0gb3ZlcmFsbF9zZWVkLAojICAgICBuMSA9IDUwLAojICAgICBuMiA9IDUwCiMgICApKQojICkKIyAKIyBwbG90KGh1YmVpX3Jlc19lbXBpcmljYWxfc2kpCmBgYAoKCgojIFJ1bm5pbmcgYW4gaW50ZXJ2ZW50aW9uIGV4cGVyaW1lbnRzCgpXb3JrIGluIHByb2dyZXNzLi4uCgojIEFja25vd2xlZGdtZW50cwoKVGhpcyBzaW11bGF0aW9ucyBhcmUgaGVhdmlseSBiYXNlZCBvbiBUaW0gQ2h1cmNoZXMnIGNvZGUsIGF2YWlsYWJsZSBbaGVyZV0oaHR0cHM6Ly90aW1jaHVyY2hlcy5naXRodWIuaW8vYmxvZy8pLgo=